Stack Overflow - Problem mit WM_COMMAND bei Dialog



  • Hallo,

    ich habe folgendes Problem: Ich docke zwei Dialoge in meiner Win32-Anwendung an, indem ich schlicht und ergreifend diese Dialoge mit dem Stil "Kontextmenü" mittels CreateDialog(...) erstelle, und entsprechend am Parentfenster positioniere. Einer der beiden Dialoge klappt wunderbar, der andere macht Probleme: Scheinbar wird ständig, in meinen Augen grundlos, eine WM_COMMAND Nachricht an den Dialog gesendet. Wenn ich zum Test eine MessageBox() darin ausgeben lasse, kommt nach wenigen Sekunden der Ausführung die Fehlermeldung "Stack Overflow", und das System hängt sich auf.

    So wird der Dialog erstellt (wird in WM_CREATE des Parentfensters aufgerufen):

    dlghandle=CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_CMDLINE),parent,CmdboxProc);
    
    	if(dlghandle!=NULL)
    	{
    		ShowWindow(dlghandle,SW_SHOW);
    	}
    	else
    	{
    		MessageBox(NULL,ERR_CMDBOXFAILED,ERR_CAPTION,MB_OK|MB_ICONERROR);
    		return false;
    	}
    

    Und so sieht die entsprechende Nachrichtenprozedur aus:

    switch(message)
    {
    	case WM_COMMAND:
    	{
    		MessageBox(NULL," "," ",MB_OK);
    		break;
    	}
    	default:
    		return false;
    }
    return true;
    

    Erkennt jemand einen Fehler? Falls nein, habt ihr einen Tipp, wie man einen solchen Fehler am Besten analysieren könnte?
    Den anderen Dialog, den ich andocke, habe ich ganz genau auf die gleiche Art und Weise erstellt, und er funktioniert. Ich verstehe das nicht.

    Bin für jede Hilfe dankbar, ich mach mit dem Problem seit 2 Tagen rum...



  • Also für mich sieht daß so aus als ob du den break nicht richtig plaziert hast.

    Probiers mal so:

    switch(message)
    {
        case WM_COMMAND:
        {
            MessageBox(NULL," "," ",MB_OK);
        }
            break;  
        default:    
            return false;
    }
    return true;
    


  • Danke aber es ändert leider nichts - hätte mich auch irgendwie gewundert... 😞



  • check doch in WM_COMMAND auf die richtige ID.



  • Hast schon recht, aber ich würde gerne generell wissen, ob es normal ist, dass WM_COMMAND so oft ausgeführt wird, oder ob ich damit rechnen muss, schwere Fehler in meinem Programm zu haben...



  • Hast du z.B. ne Edit-Box auf dem Dialog? Dann wird oft WM_COMMAND mit EN_UPDATE gesendet.



  • Oh ja, genau das ist der Fall... Danke für die Info, wusste ich nicht. Aber wieso kommt der Stack Overflow? Ich meine - wenn ich bei WM_COMMAND ne MessageBox aufrufe, müsste dies reibungslos funktionieren - selbst wenn sie oft ausgeführt werden muss, oder?


Anmelden zum Antworten