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)
    {
    }
    

Anmelden zum Antworten