Dialog erstellen mit Buttons
-
also zum Anzeigen gibts die Funktion
CDialog.DoModal
zum Schließen hab ich sowas in der Funktion die beim Klick auf den Button ausgeführt wird.
CDialog::OnOK();
hast du sowas wie ein globales Anwendungsobjekt? dann könntest dort Membervariablen definieren und diese im Dialog ändern
-
oder zum Schließen
EndDialog(IDOK);
beim drücken auf den Button ausführen.
wobei IDOK der Rückgabewert ist.
if(CDialog.DoModal()==IDOK) { // Code der ausgeführt wird, wenn der Dialog mit dem OK Button beendet wurde }
-
okay, danke ich werd mich mal durchfuchsen... wenns nicht klappt meld ich mich nochmal

-
also im Moment sieht der Quelltext bei mir so aus, habe leider versäumt nen vernünftigen Namen für den Dialog zu vergeben -.-
// Platzwahl.cpp : implementation file // #include "stdafx.h" #include "Schweissdraht.h" #include "Platzwahl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Platzwahl dialog Platzwahl::Platzwahl(CWnd* pParent /*=NULL*/) : CDialog(Platzwahl::IDD, pParent) { //{{AFX_DATA_INIT(Platzwahl) //}}AFX_DATA_INIT } void Platzwahl::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(Platzwahl) DDX_Control(pDX, IDC_BUTTON55, m_LagerButton5); DDX_Control(pDX, IDC_BUTTON44, m_LagerButton4); DDX_Control(pDX, IDC_BUTTON33, m_LagerButton3); DDX_Control(pDX, IDC_BUTTON11, m_LagerButton1); DDX_Control(pDX, IDC_BUTTON22, m_LagerButton2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(Platzwahl, CDialog) //{{AFX_MSG_MAP(Platzwahl) ON_BN_CLICKED(IDC_BUTTON11, OnButton11) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Platzwahl message handlers void Platzwahl::OnButton11() { // TODO: Add your control notification handler code here }Wie öffne ich dieses DialogFenster nun aus einem anderen Dialogfenster heraus?
-
Platzwahl dlg; if (dlg.DoModal() == IDOK) { // mach was mit Daten aus Dialog, z.B. dlg.GetReihe() oder was auch immer }
-
Also ich habe nun mal versucht in der SchweissdrahtDlg.cpp folgendes gemacht:
Platzwahl dlg2;Fehlermeldung:
C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\Schweissdraht\SchweissdrahtDlg.cpp(27) : error C2146: syntax error : missing ';' before identifier 'dlg2'
C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\Schweissdraht\SchweissdrahtDlg.cpp(27) : error C2501: 'Platzwahl' : missing storage-class or type specifiers
C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\Schweissdraht\SchweissdrahtDlg.cpp(27) : fatal error C1004: unexpected end of file foundIch habe auch grade mal ein wenig in "Visual C++ Windows-Programmierung mit den MFC" gelesen, aber da steht auch nur was von DoModal == IDOK.
Ich habe aber wie es scheint schon Probleme bei der Deklaration des zweiten Dialog-Fensters.
Und meine zweite Frage wäre:
Wenn man mit DoModal sozusagen den "Rückgabewert" des Dialogs geliefert bekommt... Wie kann man verscheidene Rückgabewerte vereinbaren? in meinem Fall die Zahlen 1-5. Muss ich das dann über Member-Variablen des neuen Dialogs realisieren?
Liebe Grüße
Basti
-
Okay, habe es nun hinbekommen:
Habe lediglich vergessen die Platzwahl.h in den anderen Dialog einzubinden -.-
Aufgerufen habe ich es dann testweise mit:Platzwahl PlatzwahlDlg; if (PlatzwahlDlg.DoModal() == IDCANCEL) { MessageBox(_T("Platzwahl"),_T("New Dialog"),MB_OK); }LG Basti
-
der Rückgabewert "IDOK" kommt ja von deinem vordefinierten OK Button
wenn du nun einen anderen Rückgabewert möchtest, dann ruf bei dem Drücken des ButtonsEndDialog(rückgabewert);
auf.
-
Super, das klappt soweit

Nun hat sich noch ein kleines Typenproblem eingeschlichen ^^
Ich deklariere in der Schweissdraht.h (mein hauptdialog)extern CString cs_freieplaetze;weil diese cs_freieplaetze von 2 Dialogen benötigt wird.
So hier sieht dann mein Code teilweise in der Platzwahl.cpp aus:BOOL Platzwahl::OnInitDialog() { CDialog::OnInitDialog(); int i_freieplaetze_length; // TODO: Add extra initialization here m_LagerButton1.EnableWindow(false); m_LagerButton2.EnableWindow(false); m_LagerButton3.EnableWindow(false); m_LagerButton4.EnableWindow(false); m_LagerButton5.EnableWindow(false); MessageBox(cs_freieplaetze,_T("freie Plätze"),MB_OK); i_freieplaetze_length = cs_freieplaetze.GetLength; for (int i=0; i<=i_freieplaetze_length-1;i++) { switch (cs_freieplaetze[i]) { case '1': { m_LagerButton1.EnableWindow(TRUE); } case '2': { m_LagerButton2.EnableWindow(TRUE); } case '3': { m_LagerButton3.EnableWindow(TRUE); } case '4': { m_LagerButton4.EnableWindow(TRUE); } case '5': { m_LagerButton5.EnableWindow(TRUE); } } //switch-Anweisung } // for-Schleife return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }Und der Compiler zeigt mir in der Zeile
i_freieplaetze_length = cs_freieplaetze.GetLength;C:\...\Platzwahl.cpp(68) : error C2440: '=' : cannot convert from 'int (__cdecl CString::*)(void) const' to 'int'
-
probiers mal mit
i_freieplaetze_length = cs_freieplaetze.GetLength();
GetLength() ist eine Funktion, also müssen Klammern hin