Sendmessage von DialogA -> DialogB



  • Hallo,

    ich habe in meiner Andwendung zwei nicht-modale Dialoge eingebettet, die mit Hilfe von Messages untereinander kommunizieren sollen. Dafür habe ich folgendes gemacht:

    Der Dialog der die Nachricht empfangen soll:

    dlgB.h:

    (...)
        afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
        DECLARE_MESSAGE_MAP()
    (...)
    

    dlgB.cpp

    BEGIN_MESSAGE_MAP( ... )
        ON_MESSAGE(WM_USER+1, OnMyMessage)
    END_MESSAGE_MAP()
    
       (...)
    
    LRESULT CDlgB::OnMyMessage(WPARAM wParam, LPARAM lParam)
    {
    
        return 0;
    }
    

    Nun rufe ich sendmessage aus dialogA auf:

    dlgA.cpp

    SendMessage(WM_USER,0,0);
    

    Leider wird die entsprechende Funktion nicht durchlaufen. Wenn ich die Zeile irgendwo im code vom DialogB aufrufe funktioniert es.

    Ich habe auch noch versuche mit ::SendMessage und PostMessage gemacht. Da passiert auch nichts.

    D.h. das die Nachricht vom DialogA nicht beim DialogB ankommt, aber warum ... ?

    Gruß



  • Weil du WM_USER sendest, aber WM_USER+1 empfangen willst. Oder war das grad ein Tippfehler? 🙄

    Edit: Und woher weiß dein SendMessage wohin die Nachricht verschickt werden soll? Muss man da nicht hWndDialogB->SendMessage(...) machen?

    Gruß Brainiac



  • Das war ein Tippfehler.

    Das mit dem Hwnd habe ich mir auch schon überlegt. Weiss aber nicht genau wie ich das anstellen soll. Habe es so versucht, hat aber nicht funktioniert:

    CDlgB x;
    HWND hWnd = x.GetSafeHwnd();
    ::SendMessage(hWnd, WM_USER+1,0,0)
    

    Hole ich so überhaupt das richtige handle??



  • Nein, so bekommst du auf jeden Fall nicht das richtige Handle.

    Wie werden denn die zwei Dialoge erstellt? Werden beide von einem Hauptfenster erstellt, oder ist einer dem anderen übergeordnet?
    Am besten macht man so was nämlich, indem man das Handle des Dialogs bei seiner Erstellung in der übergeordneten Klasse (Fenster) speichert. Dann kann der andere Dialog per GetParent(), AfxGetApp() o.ä. einen Zeiger auf die übergeordnete Klasse bekommen und von dieser dann das richtige Handle.

    Gruß Brainiac



  • Jetzt funktioniert es! Lag wie Du gesagt hast am falschen Handle.
    Danke.


Anmelden zum Antworten