Variablen des parent-Fensters ändern



  • Ich hänge etwas durch. 😕

    SDI-Programm, von FormView abgeleitet

    Ich möchte gern eine Variable meines Parent-Window von einem modalen Dialog aus ändern (der wird nicht geschlossen, sondern läuft weiter) - aber irgendwie klappen alle Lösungsvorschläge hier im Board nicht.

    Wenn ich bspw. im modalen Dialog einen Pointer auf meine Hauptklasse machen möchte scheitert es daran, dass er mir aufgrund des #include <Hauptview.h> in der .cpp des modalen Dialogs einen Compilerfehler bringt:

    hauptview.h(34) : error C2143: syntax error : missing ';' before '*'

    Wenn ich versuche, mittels Messages wenigstens über einen Umweg die Daten des Hauptframes zu ändern, passiert nichts.

    GetParentwnd()->SendMessage(WM_SENDEN,55,0);
    

    Die Message ist definitiv richtig deklariert, im Hauptfenster klappt es.

    Gibt es noch eine Möglichkeit - oder die richtige - Variablen zu ändern bzw. eine Funktion des parents aufzurufen?



  • hauptview.h(34) : error C2143: syntax error : missing ';' before '*'

    Du kannst im Hauptview.h die dialogklasse forward declarieren.

    Wenn ich versuche, mittels Messages wenigstens über einen Umweg die Daten des Hauptframes zu ändern, passiert nichts.

    GetParentwnd()->SendMessage(WM_SENDEN,55,0);
    

    Wahrscheinlich ist hauptview gar nicht der parent von deinem dialog sondern der Frame.

    Gibt es noch eine Möglichkeit - oder die richtige - Variablen zu ändern bzw. eine Funktion des parents aufzurufen?
    

    Du kannst dem constructor deines dialogs einen pointer auf das mainview mitgeben.
    Kurt



  • Wahrscheinlich ist hauptview gar nicht der parent von deinem dialog sondern der Frame.

    Genau, hast recht - daran hab ich gar nicht gedacht. 😕

    Du kannst dem constructor deines dialogs einen pointer auf das mainview mitgeben.

    Wie mache ich das? Bin in punkto Pointer ein Frischling. 😉
    Hab das jetzt so gemacht, da schmiert mir das Programm jedoch ab.

    //das steht in meiner Klasse des modalen Dialogs
    	CKabSOFTView* baba=(CKabSOFTView*) FindWindow(NULL,_T("HauptViewFenstername"));
    	baba->m_Anzahl=4;
    


  • stek schrieb:

    Hab das jetzt so gemacht, da schmiert mir das Programm jedoch ab.

    //das steht in meiner Klasse des modalen Dialogs
    	CKabSOFTView* baba=(CKabSOFTView*) FindWindow(NULL,_T("HauptViewFenstername"));
    	baba->m_Anzahl=4;// baba ist null
    

    MSDN schrieb:

    The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

    Dh es findet dein Mainview sowiso nicht.
    Ich bin absolut kein MFC Kenner. Aber in der Frame Klasse gibt es irgend eine Function sowas wie GetCurrentView vielleicht solltest du es so probieren.

    CWnd* wnd = (CFame*)GetParentwnd())->GetCurrentView();
    if ( 0 != wnd ) {
      ((CKabSOFTView*)wnd)->m_Anzahl=4;
    }
    

    Ausserdem solltest du in den FAQ nachsehen. Bin sicher dort gibt es Beispiele.
    Kurt



  • Danke Dir...nach etwas stöbern und probieren in der MSDN habe ich eine Lösung gefunden, ob sie elegant ist weiß ich nicht, auf alle Fälle funktioniert sie. 😉

    //Aufruf im modalen Dialog
    CKabSOFTView* baba=(CKabSOFTView*) GetParentOwner(); 
    baba->Senden(55); //Funktion im MainWindow
    

    Aber noch eine Frage, interessehalber:
    Wenn ich das so wie oben gestalte, kann ich keine Messages schicken...also in der Art:

    baba->SendMessage(WM_COMM_SENDEN,55,0);
    

    Warum eigentlich nicht?


Anmelden zum Antworten