membervariablen weitergeben



  • hi,
    ich probier jetzt schon tagelang an einem bestimmten problem rum und hoffe, hier kann mir jemand helfen.

    also ich möchte einfach nur von einem dialogfeld beim druck auf den OK-Button das Ergebnis der GetCurSel()-Funktion an den ursprünglichen Dialog (Klasse) zurückgeben.

    die h-datei des ersten dialoges (der automatisch aufgerufen wird):

    class CadpcmgsmDlg : public CDialog
    {
    // Konstruktion
    public:
    	CadpcmgsmDlg(CWnd* pParent = NULL);	// Standardkonstruktor
    
    // Dialogfelddaten
    	enum { IDD = IDD_ADPCMGSM_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    
    // Implementierung
    protected:
    	HICON m_hIcon;
    
    	// Generierte Funktionen für die Meldungstabellen
    	virtual BOOL			OnInitDialog();
    	afx_msg void			OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void			OnPaint();
    	afx_msg HCURSOR			OnQueryDragIcon();
    
    	DECLARE_MESSAGE_MAP()
    
    public: 
    	//Variables
    ...
    
    	int						adpcmbitrate;
    
    	//Functions
    	afx_msg void			OnBnClickedPlay();   
    	afx_msg void			OnTimer(UINT); 
    	afx_msg void			OnBnClickedStop();
    ...
    };
    

    der aufruf des 2. dialoges erfolgt so:

    void CadpcmgsmDlg::OnBnClickedAdpcm()
    { 
    	CadpcmgsmBitrateDialog bitratedialog;
    
    	bitratedialog.p_adpcmbitrate = &adpcmbitrate;
       // Create and show the dialog box
    	bitratedialog.DoModal();
    
    }
    

    h-datei des 2. dialoges:

    #pragma once
    #include "adpcmgsmDlg.h"
    
    // CadpcmgsmBitrateDialog-Dialogfeld
    
    class CadpcmgsmBitrateDialog : public CDialog
    {
    	DECLARE_DYNAMIC(CadpcmgsmBitrateDialog)
    
    public:
    	CadpcmgsmBitrateDialog(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~CadpcmgsmBitrateDialog();
    
    // Dialogfelddaten
    	enum { IDD = IDD_BITRATEDIALOG };
    
    protected:
    	virtual void			DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    	virtual BOOL			OnInitDialog();
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnBnClickedOk();
    	int rate;
    	int *p_adpcmbitrate;
    };
    

    und zu guter letzt noch der aufruf der eigentlich geplanten übergabe

    void CadpcmgsmBitrateDialog::OnBnClickedOk()
    {
    
    	CComboBox *rateBox = (CComboBox*) GetDlgItem(IDC_RATE);
    	rate = rateBox->GetCurSel();
    	*p_adpcmbitrate = rate;
    
    	this->EndDialog(1);
    
    }
    

    der compiler spuckt keine fehlermeldung aus aber es funktioniert einfach nicht. ich hoffe ihr könnt mir helfen, vielen Dank schonaml im Voraus 🙂



  • 😮 😕 😮 😕 😮 😕

    was willst du damit bezwecken??

    bitratedialog.p_adpcmbitrate = &adpcmbitrate;

    brauchst du die addresse der Variable?

    dann kann es auch nicht funzen da du nicht auf die rückmeldung des dialogs wartest sondern diese übergehst.

    bitratedialog.DoModal();//du rufst ihn auf aber wartest nicht

    richtig wäre

    if(bitratedialog.DoModal() == IDOK) //bzw. IDCANCEL für abbruch
    {
    int ncursel = bitratedialog.rate;
    }

    was versucht du damit

    *p_adpcmbitrate = rate;

    dann kannst du den Dialog mit EndDialog beenden richtig wäre aber für eine Dialogfeldbasierende Anwendung

    CDialog::OnOK(); bzw CDialog::OnCancel();



  • LowFly schrieb:

    richtig wäre

    if(bitratedialog.DoModal() == IDOK) //bzw. IDCANCEL für abbruch
    {
    int ncursel = bitratedialog.rate;
    }

    vielen dank! das hats gebracht, ich hatte schon soviel zeug ausprobiert, va mit pointern rumgespielt (deshalb die adresszuweisung) dass ich selbst schon kaum noch durchgesehen hab 😃


Anmelden zum Antworten