Unicode



  • 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


Anmelden zum Antworten