Unicode
-
Hab noch ne Frage zu Unicode.
Ich habe UNICODE definiert.
LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static WCHAR *pwBuf; static int iCount; switch(uMsg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd,&ps); SetBkMode(hDC,TRANSPARENT); SetTextColor(hDC,RGB(255,255,255)); TextOutW(hDC,5,5,pwBuf,wcslen(pwBuf)); EndPaint(hWnd,&ps); return 0; } break; case WM_TIMER: { if(wParam == UNICODE_TIMER) { iCount++; swprintf(pwBuf,(const unsigned short *) TEXT("Sekunden: %i"),iCount); } return 0; } break; case WM_CREATE: { SetTimer(hWnd,UNICODE_TIMER,1000,0); pwBuf = new WCHAR[100]; return 0; } break; case WM_DESTROY: { delete pwBuf; KillTimer(hWnd,UNICODE_TIMER); PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }
Das Liefert mir lauter '|', woran liegt das? Und warum muss ich TextOutW schreiben?
thx & cu
-
Original erstellt von MagiC Creator:
OK, ihr habt mich überzeugt. Ich schwöre, ab heute verwende ich nur noch Unicode :D!Wenn du die meisten noch vorhandenen Win9x-User erstmal verjagen willst ...
-
man brauchs ja nicht als unicode version zu kompilieren!!
-
@creator: jetzt hast du ja nur die unicode version! nimm TCHAR statt WCHAR und mach um jeden string TEXT() drum. dann kannst du per #define UNICODE bestimmen ob's unicode is oder nich
-
Sorry, ich hab mich vorher nie mit dem Thema auseinandergesetzt, daher kenn ich mich damit jetzt so gut wie überhaupt nicht aus :(. OK, ich probier's mal mit TCHAR.
thx & cu
-
So, ich include jetzt tchar.h und benutze TCHAR, _tcslen und _stprintf, es funktioniert aber trotzdem noch nicht
. UNICODE hab ich auch definiert. Frage: Muss ich um Variablen vom Typ TCHAR auch ein TEXT() rummachen? Ich denke mal nein.
thx & cu
EDIT: In der MSDN steht immer was von _UNICODE, muss ich das auch noch definieren???
[ Dieser Beitrag wurde am 14.12.2002 um 17:12 Uhr von MagiC Creator editiert. ]
-
poste mal den ganzen code oder ... :p
-
Muss dich aber warnen, der funzt net :D.
#define UNICODE #include <windows.h> #include <tchar.h> // ------------------------------------------------------------------------------------------- // #define UNICODE_TIMER 5000 // ------------------------------------------------------------------------------------------- // LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // ------------------------------------------------------------------------------------------- // HINSTANCE hInst; // ------------------------------------------------------------------------------------------- // int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { hInst = hInstance; WNDCLASSEX main; main.cbSize = sizeof(main); main.cbClsExtra = 0; main.cbWndExtra = 0; main.hbrBackground = CreateSolidBrush(RGB(0,0,100)); main.hCursor = LoadCursor(0,IDC_ARROW); main.hIcon = LoadIcon(0,IDI_APPLICATION); main.hIconSm = LoadIcon(0,IDI_APPLICATION); main.hInstance = hInst; main.lpfnWndProc = MainProc; main.lpszClassName = TEXT("unicode_class"); main.lpszMenuName = 0; main.style = CS_VREDRAW | CS_HREDRAW; RegisterClassEx(&main); HWND hMainWnd = CreateWindowEx(0,TEXT("unicode_class"),TEXT("unicode"),WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,300,300,0,0,hInst,0); ShowWindow(hMainWnd,SW_SHOW); UpdateWindow(hMainWnd); MSG msgMain; while(GetMessage(&msgMain,0,0,0)) { TranslateMessage(&msgMain); DispatchMessage(&msgMain); } return msgMain.wParam; } // ------------------------------------------------------------------------------------------- // LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static TCHAR *ptcBuf; static int iCount; switch(uMsg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd,&ps); SetBkMode(hDC,TRANSPARENT); SetTextColor(hDC,RGB(255,255,255)); TextOut(hDC,5,5,ptcBuf,_tcslen(ptcBuf)); EndPaint(hWnd,&ps); return 0; } break; case WM_TIMER: { if(wParam == UNICODE_TIMER) { iCount++; _stprintf(ptcBuf,TEXT("Sekunden: %i"),iCount); } return 0; } break; case WM_CREATE: { SetTimer(hWnd,UNICODE_TIMER,1000,0); ptcBuf = new TCHAR[100]; return 0; } break; case WM_DESTROY: { delete ptcBuf; KillTimer(hWnd,UNICODE_TIMER); PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }
cu
-
Danke @cd9000.
-
uiuuiuiui, nen ganz mieser code. bitte gib dir mehr mühe. das lässt sich ja noch nicht mal kompilieren! (visual c++ 7)
-
Ich habe den Code mal geändert! Vielleicht läufts jetzt aber anders, als du gedacht hast.
#define UNICODE #include <windows.h> #include <tchar.h> // ------------------------------------------------------------------------------------------- // #define UNICODE_TIMER 5000 // ------------------------------------------------------------------------------------------- // LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // ------------------------------------------------------------------------------------------- // HINSTANCE hInst; // ------------------------------------------------------------------------------------------- // int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { hInst = hInstance; WNDCLASSEX main; main.cbSize = sizeof(main); main.cbClsExtra = 0; main.cbWndExtra = 0; main.hbrBackground = CreateSolidBrush(RGB(0,0,100)); main.hCursor = LoadCursor(0,IDC_ARROW); main.hIcon = LoadIcon(0,IDI_APPLICATION); main.hIconSm = LoadIcon(0,IDI_APPLICATION); main.hInstance = hInst; main.lpfnWndProc = MainProc; main.lpszClassName = TEXT("unicode_class"); main.lpszMenuName = 0; main.style = CS_VREDRAW | CS_HREDRAW; RegisterClassEx(&main); HWND hMainWnd = CreateWindowEx(0,TEXT("unicode_class"),TEXT("unicode"),WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,300,300,0,0,hInst,0); ShowWindow(hMainWnd,SW_SHOW); UpdateWindow(hMainWnd); MSG msgMain; while(GetMessage(&msgMain,0,0,0)) { TranslateMessage(&msgMain); DispatchMessage(&msgMain); } return msgMain.wParam; } // ------------------------------------------------------------------------------------------- // LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static TCHAR szBuf[256]; static int iCount; switch(uMsg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd,&ps); SetBkMode(hDC,TRANSPARENT); SetTextColor(hDC,RGB(255,255,255)); TextOut(hDC,5,5,szBuf,lstrlen(szBuf)); EndPaint(hWnd,&ps); return 0; } break; case WM_TIMER: { if(wParam == UNICODE_TIMER) { iCount++; wsprintf(szBuf,TEXT("Sekunden: %i"), iCount); InvalidateRect(hWnd, NULL, TRUE); } return 0; } break; case WM_CREATE: { SetTimer(hWnd,UNICODE_TIMER,1000,0); return 0; } break; case WM_DESTROY: { KillTimer(hWnd,UNICODE_TIMER); PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }
-
OK, thx! Ich darf also nicht _tcslen und _stprintf nehmen, sondern lstrlen und wsprintf. Darauf muss man erst mal kommen :D. Ja, der Code ist mies, ich wollte ja auch nur mal'n bisschen Unicode testen. Das ist so 0815-Code :).
thx & cu
-
aber viel besser wird dein code wenn du dir richtig mühe gibst bestimmt auch ned sein :p
-
Doch, da sind dann _viel_ mehr Kommentare drin :D.
cu