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
