Kommunikation zwischen Dialogen



  • Gibt es eine elegante Methode zwischen zwei Dialogen zu kommunizieren außer mit SendMessage? Ich möchte z.B. eine komplette Klasse an einen anderen Dialog schicken. Mit den lParam und wParam variablen komme ich damit aber leider nicht all zu weit. 😞



  • [ThePro] schrieb:

    Mit den lParam und wParam variablen komme ich damit aber leider nicht all zu weit. 😞

    Warum ?

    PS: Du kannst bei der Funktion CreateDialogParam/DialogBoxParam im letzten Parameter Daten für die Nachricht WM_INITDIALOG mitgeben. Vllt bringt Dich das ja weiter.



  • [ThePro] schrieb:

    Gibt es eine elegante Methode zwischen zwei Dialogen zu kommunizieren außer mit SendMessage? Ich möchte z.B. eine komplette Klasse an einen anderen Dialog schicken. Mit den lParam und wParam variablen komme ich damit aber leider nicht all zu weit. 😞

    Du kannst doch ne klasse Sende, einfach mit nem Pointer.

    SendMessage(hdlg, WM_USER + 1, 0, &myclas);
    
    case WM_USER + 1:
    MyClas *myclas = lParam;
    

    Vielleicht hilft dir das ja.

    MfG schirrmie



  • @schirrmie: Du hast die Casts vergessen 😉 .



  • Das hatte ich schon versucht, aber irgendwas hatte mit den casts nicht hingehauen... Wie auch immer.

    Ich habe jetzt im nachinein festgestellt, dass ich das komplette Projekt etwas ungünstig gestaltet hab. Ich werde wohl nochmal von vorne anfangen und mir die wichtigsten Sachen per copy and paste aus meinem jetzigen Projekt rüberkopieren.

    Ich programmiere eigentlich immer drauf los und versuche die Probleme erst zu lösen, wenn sie auf mich zukommen. Blöd ist nur, wenn man dann merkt, dass ein ganzes konzept plötzlich nichtmehr hinhaut oder nur noch durch pfusch zu lösen ist.
    Ich würde gerne etwas mehr Ordnung und Planung in meine Projekte bringen, nur leider weiß ich nicht so recht wie das geht. 😞
    Brauch wohl noch etwas mehr Erfahrung...

    Trotzdem Danke für eure Hilfe. 🙂



  • was hat nicht hingehaut? das muss gehen, welche casts hast denn verwendet?



  • Ich hatte es in etwa so:

    CEineTolleKlasse tsp;
    ...
    SendMessage(hdlg, WM_USER + 1, 0, (int*)&tsp);
    

    so mache ich es zumindest immer, wenn ich etwas in ein char pointer casten will.
    [(char*)&tsp].



  • [ThePro] schrieb:

    Ich programmiere eigentlich immer drauf los und versuche die Probleme erst zu lösen, wenn sie auf mich zukommen. Blöd ist nur, wenn man dann merkt, dass ein ganzes konzept plötzlich nichtmehr hinhaut oder nur noch durch pfusch zu lösen ist.
    Ich würde gerne etwas mehr Ordnung und Planung in meine Projekte bringen, nur leider weiß ich nicht so recht wie das geht. 😞
    Brauch wohl noch etwas mehr Erfahrung...

    Dann solltest Du Dich umbenennen 😃 ... Nein Spaß bei Seite, guck Dir das mal an:
    http://www.sascha.atrops.com/?page=knowhow/swt.php



  • Sry hab Deinen letzten Post übersehen...

    [ThePro] schrieb:

    Ich hatte es in etwa so:

    CEineTolleKlasse tsp;
    ...
    SendMessage(hdlg, WM_USER + 1, 0, (int*)&tsp);
    

    so mache ich es zumindest immer, wenn ich etwas in ein char pointer casten will.
    [(char*)&tsp].

    Guck Dir doch mal den Prototyp der Funktion SendMessage in der MSDN an. Der letzte Parameter ist LPARAM, also long.

    So kannst Du es machen:

    #define WM_TRANSMIT  (WM_USER + 1)
    // ...
    
    CFoo cObjectToTransmit;
    // ...
    
    SendMessage(hWnd, WM_TRANSMIT 0, reinterpret_cast<LPARAM>(&cObjectToTransmit));
    

Anmelden zum Antworten