Kann kein Fenster erstellen



  • N'Abend,

    Bin mit dem Konsolen-Experte unterwegs und versuche gerade ein Windows-Fenster zu basteln. Dabei benutze ich folgenden Befehl:

    if (!(hwnd = CreateWindowEx(NULL,
                    szclassname,
                    "Mein Fenster",
                    WS_POPUP | WS_VISIBLE,
                    0,0,
                    400,300,
                    NULL,
                    NULL,
                    hinst,
                    NULL))) {
          MessageBox(hwnd, "Fehler", "XXX", MB_OK);
          return(0);
       }
    

    Erstens, spuckt mir der Borland Builder 6 eine Fehlermeldung aus, zweitens wird beim ausführen die Fehlermeldung ausgespuckt.

    Was mache ich hier falsch. Danke für eure Hilfe



  • Muss mich etwas korrigieren. Ist keine Fehlermeldung sondern nur eine Warnung, die da lautet:

    [C++ Warning] Unit1.cpp(78): W8060 Possibly incorrect assignment

    Schön, dass er mich darauf hinweißt. Wie geht es dann richtig?

    Thx



  • Der Compiler weist dich lediglich nochmal auf die Verwechslungsgefahr zwischen '=' und '==' hin, in if-Abfragen wird in der Regel ja der Vergleichsoperator verwendet.
    Wenn du die Warnung vermeiden willst dann schreibe unmissverständlichen Code.

    hwnd = CreateWindowEx(...);
    if (!hwnd)
      MessageBox(...);
    


  • Gut, habe den Quelltext jetzt soweit abgeändert, dass keine Warnung mehr vorhanden ist, dank an Jansen. Trotzdem kann ich kein Fenster erzeugen. Sobald ich das Programm ausführe, wird eine Messagebox angezeigt.

    Hier der geänderte Quelltext:

    hwnd = CreateWindowEx(NULL, szclassname, "Mein Fenster", WS_POPUP | WS_VISIBLE,
                    0,0,400,300, NULL, NULL, hinst, NULL);
       if (!hwnd) {
          MessageBox(hwnd, "Das Fenster wurde nicht erstellt!", "Fehler!", MB_OK);
          return(0);
       }
    

    Nun wird die MessageBox "Das Fenster konnte nicht erstellt werden!" ausgegeben. D.h., die Funktion CreateWindowEx(...) funzt nicht und liefert kein HWND zurück sondern NULL. Woran liegt das schon wieder? 😕

    Danke



  • Hier der Quelltext von Beginn an, vielleicht mach ich da etwas falsch?

    WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst,
    					    LPSTR lpcmdline, int ncmdshow) {
       WNDCLASSEX  winclass;
       MSG	      message;
       const char  szclassname[] = "Drawing";
       DWORD       loop_start_time;
    
       winclass.cbSize         = sizeof(WNDCLASSEX);
       winclass.style	         = CS_HREDRAW | CS_VREDRAW;
       winclass.lpfnWndProc	= WindowProc;
       winclass.cbClsExtra	= 0;
       winclass.cbWndExtra	= 0;
       winclass.hInstance	= hinst;
       winclass.hIcon	         = LoadIcon(NULL, IDI_APPLICATION);
       winclass.hCursor	= LoadCursor(NULL, IDC_ARROW);
       winclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
       winclass.lpszMenuName   = NULL;
       winclass.lpszClassName  = szclassname;
       winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    
       if (!RegisterClassEx(&winclass))
       	return(0);
       hwnd = CreateWindowEx(NULL, szclassname, "Mein Fenster", WS_POPUP | WS_VISIBLE,
                    0,0,400,300, NULL, NULL, hinst, NULL);
       if (!hwnd) {
          MessageBox(hwnd, "Das Fenster wurde nicht erstellt!", "Fehler!", MB_OK);
          return(0);
       }
    
    ...
    }
    


  • Hab den Fehler gefunden. Lag nicht an der WinMain-Methode, sondern an der Callback-Funktion. Hat sich damit jetzt alles erledigt.

    Danke für die Mühe.


Anmelden zum Antworten