CreateWindow Problem



  • hWndMain ist nicht NULL


  • Mod

    Sisko86 schrieb:

    hWndMain ist nicht NULL

    Upps überlesen. Kontrolliere das mal mit IsWindow!



  • IsWindow(hWndMain) liefert TRUE



  • Muss irgendwas mit meiner WNDCLASS zu tun haben,
    Wenn ich eine neue erstelle und ein andere Funktion für lpfnWndProc angebe Funktionierts.
    Wieso dass?


  • Mod

    Wie initialisierst Du die?



  • Hi, so müsste es funktionieren:

    hChildWnd = 
               CreateWindow (
               winclass, 
               NULL,
               WS_CHILDWINDOW | WS_VISIBLE, //  :warning: 
               pos_u, pos_v,
               100, 30,
               hWndMain, 
               (HMENU) ChildWndID, //  :warning: 
               (HINSTANCE) GetWindowLong (hWndMain, GWL_HINSTANCE), //  :warning: 
               NULL) ;
    

    Ich habe die Paramenter berichtigt und mit ⚠ gekennzeichnet!

    MfG

    WilMen



  • Sisko86 schrieb:

    Das Handle das ich zurück bekomme ist nicht NULL

    DWORD d;
    HWND hwnd =
        CreateWindow(
        winclass, // gleiche wie bei meinem Main Window
        NULL,
        WS_CHILD,
        pos_u, pos_v,
        100, 30,
        hWndMain,
        NULL,
        hInst,
        NULL
        );
    
      d = GetLastError(); // Code: 1400
    

    Wie ich schon schrieb sind seine Probleme wohl eher die Parameter die an CreateWindow() übergeben werden!


  • Mod

    WilMen schrieb:

    Hi, so müsste es funktionieren:

    S_CHILDWINDOW | WS_VISIBLE, // ⚠

    Ein Fenster muss nicht sichtbar sein!

    (HMENU) ChildWndID, // ⚠

    Ein Fenster benötigt keine ID

    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), // ⚠

    Wenn man die HINSTANCE verwendet sollte man die nehmen, die auch vom entsprechenden Modul verwendet wird! Und nicht irgendein, die man von irendeinem anderen Fenster bekommt.

    IMHO kann aber HINSTANCE NULL sein.



  • was ist denn ChildWndID bzw wie bekomm ich die.

    Meine WNDCLASS:

    WNDCLASS  wc;
    
      char winclass[64];
      strcpy(winclass, "MAINWINCLASS");
    
      /* remember instance handle */
      hInst = (HINSTANCE)hInstance;
    
      /* define and register application class */
      wc.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
      wc.lpfnWndProc   = MainWndProc;
      wc.cbClsExtra    = 0;
      wc.cbWndExtra    = 0;
      wc.hInstance     = (HINSTANCE)hInstance;
      wc.hIcon         = (icon_id <= 0) ? NULL
                          : LoadIcon((HINSTANCE)hInstance, MAKEINTRESOURCE(icon_id));
      wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
      wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
      wc.lpszMenuName  = menu_id <= 0 ? NULL : MAKEINTRESOURCE(menu_id);
      wc.lpszClassName = winclass;
    


  • @Martin Richter

    1. Man muss die Stil-Bits natürlich nicht setzen, aber da ich bei ihm keinen Aufruf von ShowWindow() bzw. SetWindowPos() gesehen habe, wäre es natürlich nicht schlecht, wenn er dann sein Fenster auch sehen würde! 🙄

    2. Stimmt, man muss keine ID angeben!

    (HINSTANCE) GetWindowLong (hWndMain, GWL_HINSTANCE) ;
    

    Ich habe den Bezeichner vergessen zu ändern! Hättest du auch selber drauf kommen können! 😉

    MfG

    WilMen


Anmelden zum Antworten