Funktionen in Elterndialog aufrufen



  • Ich habe in einem Dialogfeld ein nichtmodales Dialogfeld aufgerufen und angezeigt. ich möchte nun von diesem childdialog eine Funktion des Elterndialog aufrufen. ich habe es schon einmal mit

    CElternDlg* pDlg=dynamic_cast<CElternDlg*>(AfxGetApp()->GetMainWnd());
    pDlg->elternfunktion(string);

    versucht , klappt jedoch nicht. Hat jemand eine Idee 💡 ??
    Danke im Voraus
    Linus



  • subdialog hat eine membervariable; die des parentwindows:
    CParentwindow* pParentDlg

    wenn du das subfenster öffnest:

    pSubDlg->pParentDlg = this;

    Esco



  • Ich komm damit nicht weiter .
    Die einzigen Variablen die ich auf den ParenDlg beziehen stehen im Konstructor
    (CWin* pParent /= NULL/)
    und später noch einmal
    CWin* m_pParent

    damit komme ich aber so nicht an die Funktionen des parentDlg

    Wenn ich eine Membervariable in subdlg.h erstelle wie du sagst ,dann hagelt es im Compiler Fehlermeldungen.
    Ich komm da einfach nicht weiter . 😕



  • linus schrieb:

    Wenn ich eine Membervariable in subdlg.h erstelle wie du sagst ,dann hagelt es im Compiler Fehlermeldungen.
    Ich komm da einfach nicht weiter . 😕

    du kannst keine membervariablen erstellen oder wie?

    Esco



  • Klar kann ich Membervariablen erstellen jedoch ist der Typ im subdialog nicht bekannt. Villeicht hab ich ja ein Knoten im Gehirn . Also
    Elterndialog : CElternDlg
    Subdialog : CChildDlg

    Wenn ich jetzt in ChildDlg.h

    CElternDlg* pParentDlg;

    deklariere, bekomme ich lauter Fehlermeldungen
    "Fehlende Speicherklasse oder Typspezifizierer"



  • linus schrieb:

    Klar kann ich Membervariablen erstellen jedoch ist der Typ im subdialog nicht bekannt. Villeicht hab ich ja ein Knoten im Gehirn . Also
    Elterndialog : CElternDlg
    Subdialog : CChildDlg

    Wenn ich jetzt in ChildDlg.h

    CElternDlg* pParentDlg;

    deklariere, bekomme ich lauter Fehlermeldungen
    "Fehlende Speicherklasse oder Typspezifizierer"

    jo, das ist klar. du musst die header einbinden...

    Esco



  • neenee, So groß ist der Knoten im Gehirn nu auch wieder nicht ;-))
    sicher hab ich versucht die Header einzufügen. Allein der Versuch
    ElternDlg.h in childDlg.h einzubinden mag der Compiler gar nicht. Wogegen das Einbinden in childDlg.cpp kein Problem gibt , jedoch hilft mir das bei der Deklaration in der ChildDlg-Headerdatei nichts , dort kennt der Compiler dann wiederum den Eltern-Dilaog nicht. Das Problem muß woanders liegen.
    Sorry



  • jo, also ich kenn nur einen fehler, bei dem ein solches problem auftaucht.

    poste doch mal bitte deinen code und die genauen fehlermeldungen.

    Esco



  • OK . Hier ist mein Code

    aufrufender Elterndialog := SonChatDlg
    ChildDialog := MsgPrivatDialog

    MsgPrivatDialog.cpp :

    // MsgPrivatDialog.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "SonChat.h"
    #include "SonChatDlg.h"   //<= ELTERNDIALOG
    #include "MsgPrivatDialog.h" 
    #include ".\msgprivatdialog.h"
    
    // CMsgPrivatDialog-Dialogfeld
    
    IMPLEMENT_DYNAMIC(CMsgPrivatDialog, CDialog)
    CMsgPrivatDialog::CMsgPrivatDialog(CWnd* pParent /*=NULL*/)
    	: CDialog(CMsgPrivatDialog::IDD, pParent)
    	, m_strTelName(_T(""))
    	, m_strPrivatSend(_T(""))
    	, m_pParentDlg(NULL)
    {
    }
    
    CMsgPrivatDialog::~CMsgPrivatDialog()
    {
    }
    
    void CMsgPrivatDialog::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_STTELNAME, m_strTelName);
    	DDX_Text(pDX, IDC_EDIT1, m_strPrivatSend);
    	DDX_Control(pDX, IDC_LIST1, m_ctlPrivatList);
    }
    
    BEGIN_MESSAGE_MAP(CMsgPrivatDialog, CDialog)
    	ON_BN_CLICKED(IDOK, OnBnClickedOk)
    	ON_WM_ACTIVATE()
    END_MESSAGE_MAP()
    
    // CMsgPrivatDialog-Meldungshandler
    
    void CMsgPrivatDialog::OnBnClickedOk()
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	UpdateData(TRUE);
    
         // HIER MÖCHTE ICH DIE ELTERNFUNKTION AUFRUFEN 
    
             UpdateData(FALSE);
    }
    
    void CMsgPrivatDialog::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
    {
    	CDialog::OnActivate(nState, pWndOther, bMinimized);
    
    }
    
    const CMsgPrivatDialog::nDlgActionMsg = RegisterWindowMessage("DlgActionMsg");
    

    MsgPrivatDialog.h :

    #pragma once
    #include "SonChatDlg.h"  //<= Elterndialog
    #include "afxwin.h"
    
    // CMsgPrivatDialog-Dialogfeld
    
    class CMsgPrivatDialog : public CDialog
    {
    	DECLARE_DYNAMIC(CMsgPrivatDialog)
    
    public:
    	CMsgPrivatDialog(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~CMsgPrivatDialog();
    
    // Dialogfelddaten
    	enum { IDD = IDD_PRIVATD };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    
    	DECLARE_MESSAGE_MAP()
    public:
    	CString m_strTelName;
    	afx_msg void OnBnClickedOk();
    	afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
    	CWnd *m_pParent;
    
    public:
    	static const nDlgActionMsg;
    
    	CString m_strPrivatSend;
    	CListBox m_ctlPrivatList;
    
    	CSonChatDlg* m_pParentDlg;   //<==
    };
    

    und Hier nun die Fehlermeldungen:

    Kompilieren...
    UserDlg.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    SonChatDlg.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    SonChat.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    MySocket.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    MsgPrivatDialog.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    MsgPrivatDialog.cpp(19) : error C2614: 'CMsgPrivatDialog': Unzulässige Elementinitialisierung: 'm_pParentDlg' ist weder Basis noch Element
    MsgPrivat.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    DateDlg.cpp
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::CSonChatDlg': Fehlende Speicherklasse oder Typspezifizierer
    d:\projekte\chazon\MsgPrivatDialog.h(36) : error C2501: 'CMsgPrivatDialog::m_pParentDlg': Fehlende Speicherklasse oder Typspezifizierer
    Generieren von Code...
    
    Das Build-Protokoll wurde unter "file://d:\projekte\chazon\Release\BuildLog.htm" gespeichert.
    chazon - 22 Fehler, 0 Warnung(en)
    

    Villeicht hab ich ja Tomaten auf den Augen . Schau einfach mal drüber. Manchmal sieht man ja den Wald vor lauter Bäumen nicht 😉
    danke



  • also, ich hatte mal ein ähnliches problem beim anlegen von klasseninstanzen in der header. folgendes muss nicht helfen, hat aber schon geholfen:

    schreibe in die header des kindialogs vor folgende zeile:

    class CMsgPrivatDialog : public CDialog
    

    folgendes davor:

    class CSonChatDlg;
    

    es muss also in der MsgPrivatDialog.h nachher folgendes stehen:

    class CSonChatDlg;
    class CMsgPrivatDialog : public CDialog
    { // usw...
    

    du musst dabei die header des elterndialogs eigentlich nicht mehr in die header des kinddialogs einbinden. es müsste reichen, wenn du dies in der cpp tust.

    Esco



  • ... und der Herr sandte dem genervten Programmierer einen Engel ,der ihn von seinen Leiden erlöste.....

    Danke . es klappt.

    Die Frage nach dem Warum so?? stelle ich dann im nächsten Leben. 🙂

    Linus


Anmelden zum Antworten