Nicht modales Dialog anzeigen (Code:.Blocks)



  • Hallo zusammen !
    Ich habe diese Code aus dem Buch:

    #include <windows.h>
    #include "resource.h"
    
    LRESULT CALLBACK WndProc     (HWND, UINT, WPARAM, LPARAM) ;
    BOOL    CALLBACK ColorScrDlg (HWND, UINT, WPARAM, LPARAM) ;
    
    HWND hDlgModeless ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("Farben Dialog") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
    
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = CreateSolidBrush (0L) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
    
         if (RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("Klasse regestriert!"),
                          szAppName, MB_ICONINFORMATION) ;
             // return 0 ;
         }
    
         hwnd = CreateWindow (szAppName, TEXT ("Farbmischung über Bildlaufleisten"),
                              WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
    
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
    
        hDlgModeless = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_DIALOG) , hwnd, (DLGPROC) ColorScrDlg) ;
       // ShowWindow(hDlgModeless, SW_SHOW);
    
         while (GetMessage (&msg, NULL, 0, 0))
         {
              if (hDlgModeless == NULL || !IsDialogMessage (hDlgModeless, &msg))
              {
                   TranslateMessage (&msg) ;
                   DispatchMessage  (&msg) ;
              }
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         switch (message)
         {
    
         case WM_DESTROY :
              DeleteObject ((HGDIOBJ) SetClassLong (hwnd, GCL_HBRBACKGROUND,
                                  (LONG) GetStockObject (WHITE_BRUSH))) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    

    bekomme Dialog (nicht modales) nicht angezeigt, kann mir bitte jemand auf die sprünge helfen ?



  • Das Buch und den Code kenne ich, verdammt lang' her 🤡

    Falls WS_VISIBLE nicht gesetzt ist, ist die auskommentierte Zeile (ShowWindow(...) ) nötig.

    Hat deine IDE denn überhaupt einen Ressourcencompiler dabei? Das Buch wurde über und mit dem VS 6 geschrieben - die neueren (kostenlosen) Expressversionen werden leider ohne ausgeliefert.



  • Hallo mapper !
    Jaaa der Code stamm aus dem Buch von Charles Petzold Windows-Programmierung 5. Auflage (Das Entwicklungbuch zur Win32-API)
    Alle vorgängige Projekte mit Dialoge haben einwandfrei funz. nur bei diesem Projekt klemmts, bekomme einfach nicht gebacken. (Ressourcen Compiler installiert)
    Code::Blocks hat kein Res.Editor, darum nutze ich separaten Res.Editor.
    WS_VISIBLE gesetzt, wenn in der Zeile kometar weg mache:

    ShowWindow(hDlgModeless, SW_SHOW);
    

    funz trotzdem nicht.

    Habe in google nach Ansätze rum geschnüffelt, da finde nur MFC scheiß.
    Irgend-wo habe ich Fehler, nur ich komme nicht drauf wo...

    EDIT//
    Fehler gefunden: Eigenschaft "Clip Children" von Dialog auf TRUE setzen


Anmelden zum Antworten