Unicode



  • Was hast du denn für ne Funktion eingegeben?

    cu



  • z.B. "lol" und nochmal ne richtige. Aber ich kann's wie gesagt nicht mehr nachbilden! sorry. 😞



  • Macht nix. Ich kann da auch nix machen, da es **wahrscheinlich an der Funktion liegt, die den String ausrechnet, und die ist in einer Dll, und von der hab ich den Quellcode net. Aber DANKE, dass du mir gesagt hast, dass da'n Fehler ist, mir ist bis jetzt nämlich noch keiner aufgefallen.

    thx & cu**



  • 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


Anmelden zum Antworten