Dialogbased App big problems



  • Hallo !

    Bitte Bitte Hilfe!

    Ich habe eine dilalogbasierende Anwendung. In dieser befindet sich
    ein Rahmen IDR_Rahmen. In Diesen Rahmen zeichne ich mit meiner
    Funktion ShowDlg(CDialog *pDlg) einen untergeordneten dialog. Wie kann ich festellen
    das in diesen dlg ein button gedrück wurde, und im main dlg darauf reagieren ????

    Hab´s shon mit SendMessage(), WinThread(), ... probiert. Ohne Erfolg!
    Währe über jeden Strohhalm glücklich !!!

    Auszug aus meinen source:

    // *******************************************************
    // * Add a new dialog for display to the main window     *
    // *******************************************************
    void AddDlg(CDialog *pDlg, unsigned short id)
    {
       CRect  Rahmen;
    
       GetDlgItem(IDR_Rahmen)->GetWindowRect(&Rahmen);
       ScreenToClient(&Rahmen);
    
       pDlg->Creat(id, this);
       pDlg->MoveWindow(Rahmen);
       pDlg->UpdateWindow();
       pDlg->ShowWindow(SW_HIDE);
    }
    
    void ShowDialog(CDialog *pDlg)
    {
       StartDlg.ShowWindow((pDlg == &StartDlg) ? SW_SHOW : SW_HIDE);
       MotionCmdDlg.ShowWindow((pDlg == &MotionCmdDlg) ? SW_SHOW : SW_HIDE);
       // usw ...
    
    }
    

    mfg
    Michael



  • Überschreibe im untergeordneten Dialog den Konstruktor, und gib ihm einen Handle auf den MainDlg mit.
    Diesen Handle speicherst in einer Membervariable ( Ev. CDialog Pointer)
    Anschl. kannst du immer Methoden des Main Dlgs aufrufen:

    // Konstrutkor Unterdialog
    CUnterDialog::CUnterDialog(CWnd *pParentWnd): CDialog(pParentWnd)
    {

    m_pParentWnd = (CMainDialog*)pParentWnd; //m_pParentWnd ist CMainDialog*

    }
    // Aufruf des MainDialogs
    void CUnterDialog::OnTaste()
    {
    m_pParentWnd->Methode();
    }

    // Konstrutkion des Unterdialogs
    void CMainDialog::OnUnterDialog()
    {
    CUnterDialog dlg(this); // Gibt Handle auf unser MainWindow mit
    dlg.DoModal();
    }



  • Suppa !!! Danke für den Tipp, werd´s gleich mal probieren.

    Viele Grüße
    Michael



  • Hallo !

    Hab das jetzt mal ausprobiert.
    Jedoch hat das im Konstuktor nicht Funktioniert.
    Habe mir nun ne inline-Funktion im UnterDlg mit namen
    SetMainDlg(CWnd *pDlg) {m_pMainDlg = (CTestDlg 😉 pDlg; }; erstellt.

    Wenn ich nun aber im UnterDialog in OnTest1() m_pMainDlg-> schreibe
    bekomme ich alle Methoden von CDialog , jedoch nicht meine eigenen.
    FuelleListe, usw...

    Bitte gebt mir nen Tipp was ich falsch, bzw wie ich zu meinen eigenen
    Methoden komme.

    Habs auch über PostMessage(msg, lParam, wParam) versucht.
    Merke jedoch nicht das in OnCommand() sich was endert.
    Kann man diese Messages auch wo anders abfragen? Werd aus der MFC zu diesen Tema nicht schlau. Lieber wers mir wenn man die eigenen Methoden aus den HauptDlg direckt im UnterDlg verwenden könnte.

    Viele Grüße
    Michael



  • Hi,

    bei mir funzt sowas mit folgendem Code:

    Im untergeordneten Dialog rufe ich SendMessage wie folgt auf (wenn knopf gedrückt):

    GetParent()->SendMessage(WM_USER+200,0,0);

    im Rahmen frage ich in der Winproc die message ab:
    if (message==WM_USER+200))...
    und siehe da es funzt 🙂

    Hoffe mal ich konnte helfen....



  • Hallo

    Suppa!!! Danke jetzt funkt´s!

    @ "der Digge" Danke Dir, hab es jetzt mit Deiner Variante implementiert.

    @ "-" auch Dir Danke, falls Du diesen Beitrag liest, köntest du
    mir sagen, ob es mit Deiner Variante auch möglich ist eigene
    Memberfunktionen zu verwenden. Währe nämlich für Zukünftige Projekte
    sehr nützlich.

    Viele Grüße
    Michael


Anmelden zum Antworten