أريد ان أكتب بالعربي
يعني مثلا :
cout<<"السلام عليكم";
أرجوا المساعدة
أريد ان أكتب بالعربي
يعني مثلا :
cout<<"السلام عليكم";
أرجوا المساعدة
السلام عليكم و رحمة الله و بركاته
إليك الكود:
#include<iostream>
using namespace std;
#include<windows.h>
#ifdef WIN32
#endif
#define _WIN32_WINNT_WIN7 0x0601
typedef struct _CONSOLE_FONT_INFOEX
{
ULONG cbSize;
DWORD nFont;
COORD dwFontSize;
UINT FontFamily;
UINT FontWeight;
WCHAR FaceName[LF_FACESIZE];
}CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
PCONSOLE_FONT_INFOEX testFont;
int main()
{
HANDLE hstdo;
hstdo = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hstdo, FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_BLUE);
HANDLE OutputH;
OutputH = GetStdHandle(STD_OUTPUT_HANDLE);
testFont->dwFontSize.X = 10;
testFont->dwFontSize.Y = 20;
SetCurrentConsoleFontEx(OutputH, TRUE, testFont);
UINT a=864;
if ((SetConsoleOutputCP(a)==0))
cout<<"CP not changed."<<endl;
else
cout<<"CP changed to أحمد المتألق"<<a<<endl;
cout<< GetConsoleOutputCP() <<"\n";
system("PAUSE");
return 0;
}الكود يقوم بالآتي:
نغير لون النص.
تغير حجم النص.
تغير ترميز النص.
تغير خط الكتابة.
لماذا تم تضمين هذا السطر:
#define _WIN32_WINNT 0x0601
يستخدم هذا السطر للتعرف علي نظام التشغيل الخاص بك وضم بعض الملفات الخاصه به و لمزيد من التفاصيل يرجى زياره الرابط التالي:
http://msdn.microsoft.com/en-us/library/aa383745%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ff556164.aspx
بالنسبة للدالة SetCurrentConsoleFontEx
http://msdn.microsoft.com/en-us/library/ms686200%28VS.85%29.aspx
قد لا أجد الوقت الكافي لمتابعة الموصوع و لكن الإخوة الكرام لن يقصروا معك :)
أطيب الأمنيات.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
شكرا جزيلا و لكن هناك مشكلتين
الأولى : بيئة العمل لدي لا تتدعم العربي Dev - C++
الثانية : 28 `SetCurrentConsoleFontEx' undeclared (first use this function)
مع اني تضمنت windows.h و ايضا Wincon.h
SetCurrentConsoleFontEx موجودة في الانظمة windows vista فما فوق فقط.
كل ما تحتاج لفعله هو مثلما قال الأخوه و هو تغيير الـ Code Page الخاصه بالكتابه داخل Output Stream (و هى نفسها المستخدمه فى رسم الحروف داخل شاشة الـ Console) بإستخدام الداله.
لاحظ أن شاشة الـ Console لها خطوط معينه و ليس كل الخطوط ما تكون متاحه للإستخدام لذا وجب عليك الحذر فى هذه النقطه.
الخطوط المتحه بشكل إفتراضى داخل ويندوز (ما قبل vista) للإستخدام من خلال الـ Console لن تسمح لك بالكتابه بأى من اللغات خارج نطاق الخطين الوحيدين المتاحين بنظام التشغيل.
بالنسبه للداله SetCurrentConsoleFontEx هى متاحه داخل الخدمات الخاصه بالكونسول بويندوز و لكن لم يتم تضمين دوال API لها (و غيرها) إلا بدءا من فستا و يمكنك كتابة هذه الدوال من جديد فقط إذا عرفت رقم الخدمه الخاصه بها و هم كالتالى:
typedef enum _CONSOLE_API_NUMBER {
ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
ConsolepGetConsoleInput,
ConsolepWriteConsoleInput,
ConsolepReadConsoleOutput,
ConsolepWriteConsoleOutput,
ConsolepReadConsoleOutputString,
ConsolepWriteConsoleOutputString,
ConsolepFillConsoleOutput,
ConsolepGetMode,
ConsolepGetNumberOfFonts,
ConsolepGetNumberOfInputEvents,
ConsolepGetScreenBufferInfo,
ConsolepGetCursorInfo,
ConsolepGetMouseInfo,
ConsolepGetFontInfo,
ConsolepGetFontSize,
ConsolepGetCurrentFont,
ConsolepSetMode,
ConsolepSetActiveScreenBuffer,
ConsolepFlushInputBuffer,
ConsolepGetLargestWindowSize,
ConsolepSetScreenBufferSize,
ConsolepSetCursorPosition,
ConsolepSetCursorInfo,
ConsolepSetWindowInfo,
ConsolepScrollScreenBuffer,
ConsolepSetTextAttribute,
ConsolepSetFont,
ConsolepSetIcon,
ConsolepReadConsole,
ConsolepWriteConsole,
ConsolepDupHandle,
ConsolepGetHandleInformation,
ConsolepSetHandleInformation,
ConsolepCloseHandle,
ConsolepVerifyIoHandle,
ConsolepAlloc,
ConsolepFree,
ConsolepGetTitle,
ConsolepSetTitle,
ConsolepCreateScreenBuffer,
ConsolepInvalidateBitmapRect,
ConsolepVDMOperation,
ConsolepSetCursor,
ConsolepShowCursor,
ConsolepMenuControl,
ConsolepSetPalette,
ConsolepSetDisplayMode,
ConsolepRegisterVDM,
ConsolepGetHardwareState,
ConsolepSetHardwareState,
ConsolepGetDisplayMode,
ConsolepAddAlias,
ConsolepGetAlias,
ConsolepGetAliasesLength,
ConsolepGetAliasExesLength,
ConsolepGetAliases,
ConsolepGetAliasExes,
ConsolepExpungeCommandHistory,
ConsolepSetNumberOfCommands,
ConsolepGetCommandHistoryLength,
ConsolepGetCommandHistory,
ConsolepSetCommandHistoryMode,
ConsolepGetCP,
ConsolepSetCP,
ConsolepSetKeyShortcuts,
ConsolepSetMenuClose,
ConsolepNotifyLastClose,
ConsolepGenerateCtrlEvent,
ConsolepGetKeyboardLayoutName,
ConsolepGetConsoleWindow,
#if defined(FE_SB) // for Kernel32 Single Binary
ConsolepCharType,
ConsolepSetLocalEUDC,
ConsolepSetCursorMode,
ConsolepGetCursorMode,
ConsolepRegisterOS2,
ConsolepSetOS2OemFormat,
#if defined(FE_IME)
ConsolepGetNlsMode,
ConsolepSetNlsMode,
ConsolepRegisterConsoleIME,
ConsolepUnregisterConsoleIME,
#endif // FE_IME
#endif // FE_SB
ConsolepGetLangId,
ConsolepMaxApiNumber
} CONSOLE_API_NUMBER, *PCONSOLE_API_NUMBER;كما ترى العديد من هذه الخدمات متاحه منذ منذ ويندوز 2000 و لكن لم يتم تضمين جزء منها إلا مع ويندوز xp و الأخر مع فستا و 7 و يوجد منهم ما لم يتم تضمينه بعد.
كل ما يهمنا الأن هو الخدمه ConsolepSetFont حيث هى المسئوله عن تحديد الخط المستخدم بشاشة الكونسول قم بالبحث عنها داخل Google و ستصل لنتيجه جيده إن شاء الله.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks