DialogBox



  • Hi,
    Ich bin gerade dabei WinAPI zu lernen. In allen Tutorials sehe ich, dass alle zuerst kompliziert eine WindowClass definieren usw. Ist auch schön und gut, nur kann man sich das für die Zukunft nicht sparen?
    Ich habe mal Versucht gleiche einen Dialog zu erstellen und mit DialogBox zu starten, alles geht, nur ich sehe keinen Dialog, das Programm beendet gleich ohne dass ich etwas zu sehen bekomme ...
    Danke



  • Ich glaube, das liegt daran, daß nur Fenster beim System angemeldet werden (RegisterClass) und eine DialogBox außerdem ein Fenster als Parent braucht (ich laß mich aber gern eines Besseren belehren!).

    Erzeug halt das Fenster unsichtbar und erstell sofort danach deinen Dialog (wird AFAIK in ner Dialog-basierenden MFC-Anwendung genauso gemacht).

    [ Dieser Beitrag wurde am 22.05.2002 um 12:47 Uhr von Cocaine editiert. ]



  • Vielen Dank



  • Nun - um das Registrieren einer Fensterklasse kommst Du nicht drum herum (typischer Fall von 'isso' *g*). Aber um einen Dialog als Programmfenster anzeigen zu lassen, mußst Du folgendes tun:

    Beim füllen der WNDCLASS-Struct bekommt cbWndExtra den Wert DLGWINDOWEXTRA.

    lpszClassName der gleichen Struct bekommt wie gewohnt einen Namen (z.B: "MyClass").

    Im Ressourcenscript mußt Du diese Fensterklasse noch dem Dialog bekannt machen, was sich AFAIK zumindest bei VC++ nur 'per Hand' bewerkstelligen lässt - und das geht so:
    Ressourcendatei in einem Texteditor öffnen und dort die Zeile:

    CLASS "MyClass"

    einfügen.

    4. CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, NULL); aufrufen.

    That's it.

    HTH,
    FB



  • Es reicht völlig wenn du in WinMain folgendes schreibst:

    int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hprev,LPSTR cmdline,int cmdshow)
      DialogBox(hinst, (LPCTSTR) IDD_MAINDIALOG, NULL, MainDlgProc);
      return 0;
    }
    


  • Bei reinen Dialogbasierten Anwendung empfiehlt sich das hier:
    Vielleicht mal was für die FAQ?

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include "resource.h"
    
    BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    //Deinen Dialog nennst du "Dialog" in der Ressource und rufst ihn so auf:
    //Das Aussehen ist beliebig!
      return DialogBox (hInstance, "Dialog", NULL, DialogProc);
    }
    
    BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {     
         switch (message)
         {
         case WM_INITDIALOG:
                //Anstatt WM_CREATE heisst es hier WM_INITDIALOG
                return TRUE;
    
         case WM_CLOSE:
                EndDialog (hwnd,0);
                return TRUE;   
         }
         return FALSE;
    }
    

    [ Dieser Beitrag wurde am 22.05.2002 um 16:34 Uhr von TKool editiert. ]


Anmelden zum Antworten