Variablen und Unterdialoge...



  • Hallo nochmal... vielleicht weis diesmal wer Rat und ich muss es ned selbst wieder in 5-tägiger Bastelei selbst rausfinden , oder scheitern 😉

    Ich habe eine dialogbasierende MFC Anwendung. Ich rufe als erstes ein kleines Fenster auf, wo sich ein Button Einstellungen befindet und ein Button Start. Beim Button Einstellungen geht ein weiterer Dialog auf, wo ich die Einstellungen für den COM Port vornehmen möchte. Diese Einstellungen möchte ich gerne unter Variablen speichern, so dass sie mir zur Verfügung stehen. Mit OK schliesse ich den Dialog Einstellungen und rufe mit Start das "Hauptprogramm" nun auf. Will ich nun auf diese Variablen zugreifen, sind sie futsch, jedenfalls so, wie ich es bisher mache.

    Ich definiere mir im ersten Dialogfenster unter public Variablen, mache sie in den anderen 2 Dialogen bekannt und kann diese auch benutzen. Nur Änderungen an den Variablen im Dialog Einstellungen interessieren im Dialog Start ned...

    Hat wer eine einfache Idee? Sonst bastel ich mir was kompliziertes mit ner .txt als Zwischenspeicher. Aber das kann doch eigentlich ned Sinn und Zweck sein.

    Grusse, Merc



  • in deinem hauptdialog wo du den unterdialog aufrufst

    machst du in der

    .h

    ganz unten unter deiner klassendef

    CMainFrame* GetMainFrameWnd(void);
    

    in der .cpp

    CMainFrame* GetMainFrameWnd(void)
    {
      return (CMainFrame*)AfxGetMainWnd();
    }
    

    Jetzt muesstet du auf die fkt und auf die variablen zugang haben mit dem pfeil operator

    GetMainFrameWnd->

    z.b.

    GetMainFrameWnd->SetSpeed(m_unterdialogvariable);



  • Dank dir schonmal für die Antwort... nur dass es mich ned mag 🙂 Nehmen wir mal die .h Datei 🙂 Ist von MFC generiert und ich hab sie bisher unangetastet gelassen.

    // HDTV_MICDlg.h : header file
    //
    
    #if !defined(AFX_HDTV_MICDLG_H__A0B41CD4_166A_4DD8_8B4C_B76C83773391__INCLUDED_)
    #define AFX_HDTV_MICDLG_H__A0B41CD4_166A_4DD8_8B4C_B76C83773391__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    /////////////////////////////////////////////////////////////////////////////
    // CHDTV_MICDlg dialog
    
    class CHDTV_MICDlg : public CDialog
    {
    // Construction
    public:
    	CHDTV_MICDlg(CWnd* pParent = NULL);	// standard constructor
    
    	short m_port;
    
    // Dialog Data
    	//{{AFX_DATA(CHDTV_MICDlg)
    	enum { IDD = IDD_HDTV_MIC_DIALOG };
    		// NOTE: the ClassWizard will add data members here
    	//}}AFX_DATA
    
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CHDTV_MICDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
    	//}}AFX_VIRTUAL
    
    // Implementation
    protected:
    	HICON m_hIcon;
    
    	// Generated message map functions
    	//{{AFX_MSG(CHDTV_MICDlg)
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	afx_msg void OnButtonStart();
    	afx_msg void OnButtonAbout();
    	afx_msg void OnButtonProperties();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_HDTV_MICDLG_H__A0B41CD4_166A_4DD8_8B4C_B76C83773391__INCLUDED_)
    

    Wenn ich nun deinen Codeschnipsel nehme, dann bekomm ich ne Latte an Fehlermeldungen. Eigentlich alle gleich, daher nur eine mal Quoten 😉

    :\program files\microsoft visual studio\myprojects\hdtv_mic\hdtv_micdlg.h(52) : error C2143: syntax error : missing ';' before '*'
    c:\program files\microsoft visual studio\myprojects\hdtv_mic\hdtv_micdlg.h(52) : error C2501: 'CMainFrame' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\myprojects\hdtv_mic\hdtv_micdlg.h(52) : error C2501: 'GetMainFrameWnd' : missing storage-class or type specifiers

    Schieb ich den zweiten Codeschnipsel nun noch hinein, erhöht sich nur meien Fehlerzahl 🙂

    Kann es sein, dass dein Lösungsansatz nur SDI und MDI Applikationen betrifft? Weil MSDN irgendwie bei dem Stichwort CMainFrame nur auf SDI und MDI Bezug nimmt.

    Sry falls ich den Wald vor Bäumen mal wieder nicht sehe, aber ich bastel erst gut nen Monat mit MFC.


Anmelden zum Antworten