Mein Erstes Fenster geht nicht



  • sobald ich es starte stürtz mir das programm ab, könnte jemand bitte das programm korrigieren ?

    #define STRICT
    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    const char szAppName[] = "Ein eigenes Fenster";
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                       PSTR szCmdLine, int iCmdShow){
    
       HWND       hWnd;
       MSG        msg;
       WNDCLASS   wc;
    
       wc.style         =  CS_HREDRAW | CS_VREDRAW;
       wc.lpfnWndProc   =  WndProc;
       wc.cbClsExtra    =  0;
       wc.cbWndExtra    =  0;
       wc.hInstance     =  hInstance;
       wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
       wc.hIcon         =  LoadIcon(NULL,IDI_APPLICATION);
       wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
       wc.lpszClassName =  szAppName;
       wc.lpszMenuName  =  NULL;
    
       RegisterClass(&wc);
    
       hWnd = CreateWindow(szAppName,
                           "Titelleiste",
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,          /* X-Position auf dem Monitor */
                           CW_USEDEFAULT,          /* Y-Position auf dem Monitor */
                           CW_USEDEFAULT,          /* Fensterbreite              */
                           CW_USEDEFAULT,          /* Fensterhoehe               */
                           NULL,
                           NULL,
                           hInstance,
                           NULL);
    
       ShowWindow(hWnd, iCmdShow);
       UpdateWindow(hWnd);
    
       while (GetMessage(&msg, NULL, 0, 0))
       {      
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
       switch (message)
       {   
           case WM_DESTROY:
           {
             PostQuitMessage(0);
             return 0;
           }
           return DefWindowProc(hWnd, message, wParam, lParam);
       }
    }
    


  • Vertausch mal die drittletzte mit der zweitletzten Zeile... 😉



  • Ja ok es geht unter dev vpp aber warum geht es bitte nicht mit visual studio ?
    kann bitte jemand für dumme erklären ?

    Fehlermeldung:

    error C2440: '=': 'const char [20]' kann nicht in 'LPCWSTR' konvertiert werden
    error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [20]' in 'LPCWSTR' nicht möglich
    C4244: 'return': Konvertierung von 'WPARAM' in 'int', möglicher Datenverlust



  • Lass mal die allererste Zeile wech.



  • Falls du Visual C++ 2005 (Express?) benutzt, ist standardmässig Unicode eingeschaltet. Entweder du machst den Source unicode-fähig oder du schaltest es in den Einstellungen einfach aus 😉



  • Habe das gleiche problem...
    Was ist unicode?
    Und was muss ich alles deaktivieren damit es funktioniert?
    Ich will nicht mit den einstellungen rumspielen, nachher geht garnixmehr 😕 lol
    Danke im voraus



  • unicode: http://de.wikipedia.org/wiki/Unicode

    wenn du ein projekt hast dann mach doch oben in der leiste project auf und dann eigenschaften

    dort findest du ein untermenü "allgemein" dort kannst du den zeichensatz auswählen



  • Achso! Ich hab bei Extras->Optionen gesucht...
    1000 Dank!
    Kann man das auch so festlegen das man das nicht für jedes program neu einstellen muss?



  • ccl_destroyer schrieb:

    Kann man das auch so festlegen das man das nicht für jedes program neu einstellen muss?

    IMHO nein.



  • Oh mann...

    Wie lang hat mich das gefuchst!!!

    Vielen Dank an dieser Stelle!

    hat jemand ne Ahnung wie man Unicode gerecht programmiert?



  • wissen eigentlich alle hier

    char = multibyte
    wchar_t = unicode
    TCHAR = beides

    "abba" = multibyte
    L"abba" = unicode
    _T("abba") = beides
    TEXT("abba") = beides

    main = multibyte
    wmain = unicode
    _tmain = beides

    strcpy = multibyte
    wcscpy = unicode
    _tcscpy = beides

    LPSTR = multibyte
    LPWSTR = unicode
    LPTSTR = beides

    das kann man immer so weiter fuehren

    fuer string hat sich diese bewaehrt
    typedef std::basic_string<TCHAR> tstring;

    beste quelle:
    MSDN

    {o;

    ich selber progge immer so, das ich stets zwischen multibyte und unicode umschalten kann ohne was umcoden zu muessen


Anmelden zum Antworten