Dialog als Hauptfenster mit Messageloop?



  • Huhu!

    Ich arbeite momentan an einem kleinem kleinen Dialogbox basierten Netzwerkprogramm.
    Der Einfachheit halber möchte ich komplett auf Threads verzichten und daher select() verwenden, um die Sockets zu verarbeiten.
    Zudem würde ich gerne den Dialogbox-Editor des Visual Studios verwenden, statt mühsam alle Elemente wie Buttons oder Statusbalken per Hand in den Code einzufügen zu müssen

    Momentan mache ich das so:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        DialogBox (Instance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, DialogProc);
    }
    

    Die Sache hat allerdings einen Haken: Die DialogBox funktion ist ein blocking call, d.h. sie wartet so lange bis der Dialog geschlossen wird.
    Das ist aber doof, weil ich nun keine sockets abfragen kann.

    Dieser Ansatz war auch ohne Erfolg:

    BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {    
         switch (message)
         {
         case WM_INITDIALOG:
    		 mainloop();
    		 return TRUE;
         ...
    

    Wobei mainloop() sich wie eine Programmhauptschleife verhalten soll, wo u.a. select() in einer Endlosschleife aufgerufen wird.
    Bei dieser Methode wird der Dialog erst gar nicht angezeigt, weil Windows scheinbar darauf wartet, bis der Callback zurückkehrt. (Wahrscheinlich erzeugt das DialogBox Macro aber auch einen eigenen messageloop, der durch die Endlosschleife dann nie wieder abgearbeitet wird!?)

    Am liebsten wär mir die CreateWindow methode, nur dass ich eben den Dialogbox-Editor zum erstellen des Dialogs benutzen kann. Ist sowas möglich? Oder kann man eine DialogBox eventuel sogar nonblocking aufrufen?

    mfg



  • Such mal unter www.codeproject.com nach dem Artikel "Tips for dialog based applications" ...

    HTH,
    Martin



  • Sorry, falscher Hinweis 😡

    Hier:
    "Program with a Dialog Box as the Main Window": http://www.relisoft.com/Win32/windlg.html

    Martin



  • Jau vielen Dank, genau das habe ich gesucht. 🙂


Anmelden zum Antworten