für einen Hauptdialog 2 klassen: CWinApp und CDialog



  • hi,

    warum erstellt mfc für einen hauptdialog 2 klassen: CWinApp und CDialog und leitet davon ab? wie schaut das intern aus?

    das eine ist das Formular das andere die Application? wo liegt dann der hauptthread, ist das die CHauptdialogApp::InitInstance()?

    die OnInitDialog() wird ja beim initialisieren des formulars aufgerufen...

    hab ich von der abgeleiteten Formularklasse zugriff auf die abgeleitete Applicationsklasse?

    hab sowas schon gesehen:

    class CHauptdialogApp : public CWinApp
    {
    public:
        int m_vec;
      ......
    };
    
    extern CHauptdialogApp theApp;
    

    dh ich könnte sowas machen in der Hauptdialogklasse sowas machen:

    void CHauptdialogDlg::OnBnClickedButton2()
    {
    	// TODO: Add your control notification handler code here
    
    	theApp.m_vec = 122;
    }
    

    naja mit extern arbeite ich nicht gerade gerne;-)

    ist auch sowas zulässig:
    also das ich den handle in einen klassenpointer caste?

    CHauptdialogApp *ptr_mainApp = ((CHauptdialogApp*)GetParent());
    

    cu



  • das scheint der hauptthread zu sein:

    BOOL CHauptdialogApp::InitInstance()
    {
    	InitCommonControls();
    
    	CWinApp::InitInstance();
    
    	AfxEnableControlContainer();
    
    	CHauptdialogDlg dlg; // instanz der Hauptdialogklasse erzeugen
    	m_pMainWnd = &dlg;
    
    	if (nResponse == IDOK)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über OK zu steuern
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    	return FALSE;
    }
    

    was ich da nicht verstehe:

    CHauptdialogDlg dlg;
    	m_pMainWnd = &dlg;
    

    wo ist m_pMainWnd definiert? warum wird dem die instanz der Hauptdialogklasse übergeben?

    danke soweit

    cu



  • Hi!

    Du scheinst alles hinterfragen zu wollen, was? Da hast du noch viel Forschungsarbeit vor dir. 😃
    (Nicht muckeln, ging mir zu Anfang auch so - irgendwann gibt man dann auf und noch etwas später klärt sich alles von selber... 🙂 )

    Wenn du wissen willst, wo eine Variable/Funktion deklariert ist, mach auf den Namen rechte Maustaste und da kannst du dann sagen "Gehe zu Deklaration".
    Vielleicht musst du noch die Browseinfos erstellen, das geht aber ganz einfach. 🙂

    m_pMainWnd ist eigentlich doch ein sprechender Name: Dahinter versteckt sich das Hauptfenster der Anwendung.
    Da in deinem Fall der Dialog das einzige Fenster ist, ist er auch das Hauptfenster.
    An diesen Zeiger kommst du von ÜBERALL mit AfxGetMainWnd() wieder dran.

    Und wo das herkommt ist doch auch logisch: Das muss in einer Basisklasse deklariert sein. 🙄

    Alle Klarheiten beseitigt? 🤡


Anmelden zum Antworten