About Dialog Parameter übergeben???
-
ich habe einen 2ten Dialog genauso anelegt wie der About Dialog einer anwendung
in einer funktion rufe ich diesen auf
CCHGDlg dlgChg; dlgChg.DoModal();
und möchte ihm folgende info mitgeben
m_list.GetItemText(nIndex, 1));
dort ist ne einfache Zahl abgelegt z.b. 1150 falls dies hilft das Übergeben zu vereinfachen
Hier die funktion wie sie jetzt ist
//wenn man einen Doppelklick auf das CListCrtl ausführt void CChangeProjectPriorityDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { CWaitCursor waitCursor; int nIndex = m_list.GetSelectionMark(); UpdateData(); CCHGDlg dlgChg; dlgChg.DoModal(); MessageBox(m_list.GetItemText(nIndex, 1)); *pResult = 0; }
-
Der schönste Weg ist es, wenn Du dem Konstruktor des Dialoges die notwendigen Parameter mitgibst. Dann kannst Du in dem OnInitDialog des Dialoges diese Daten verwenden und auf entsprechenden Elementen anzeigen.Wenn was zurück gegeben werden soll, so kannst Du dies entweder über Public-Member Variablen oder Methoden machen.
-
ich hatte hier nen Treat gefunden da ging es darum das er beim aufrufen eines dialogs gleich ne funktion ausgeführt haben wollte
würde das dann auf mein Beispiel bezogen so aussehen?
CCHGDlg dlgChg;
dlgChg.CCHGDlg( m_list.GetItemText(nIndex, 1) );oder wie übergibt man das dem konstruktor?
-
In der Include-Datei:
class CCHGDlg : public CDialog { public: CCHGDlg(CString meinParameter); protected: CString m_meinParameter; virtual BOOL OnInitDialog(); // und noch vieles andere mehr... };
In der CPP-Datei des Dialoges:
CCHGDlg::CCHGDlg(int meinParameter) : m_meinParameter(meinParameter) { } BOOL CCHGDlg::OnInitDialog() { CDialog::OnInitDialog(); SetWindowText(m_meinParameter); }
Und in der CPP-Datei die den Dialog aufruft:
CCHGDlg dlgChg(m_list.GetItemText(nIndex, 1))); dlgChg.DoModal();
-
ich erhalte im DebugModus folgende fehlermeldung
Assert
dlgcore.cpp Zeile 485
dort steht folgendes
Zeilen 481 bis 485
INT_PTR CDialog::DoModal() { // can be constructed with a resource template or InitModalIndirect ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL || m_lpDialogTemplate != NULL);
CCHGDlg::CCHGDlg(int meinParameter) : m_meinParameter(meinParameter)
dort hatte ich aber int durch CString ersetzt
achso er beschwert sich wohl über fehlendes
CCHGDlg::CCHGDlg(CString meinParameter) : CDialog(CAboutDlg::IDD)
-
So hab das jetzt so realisiert
CCHGDlg::CCHGDlg(CString meinParameter) : CDialog(CAboutDlg::IDD) { m_meinParameter = meinParameter; //AfxMessageBox(meinParameter); }
dies funktioniert jedenfalls
-
Du kannst auch folgendes schreiben (ist aber Ansichtssache):
CCHGDlg::CCHGDlg(CString meinParameter) : CDialog(CAboutDlg::IDD), m_meinParameter(meinParameter) { }