Wo ist die Initialisierungroutine hin?
-
Hallo,
wenn ich aus einem Menue heraus ein neues Dialogfenster öffne, dann haben die Header- und die Dialogdatei ja einen ähnlichen Aufbau wie in der Hauptdialogklasse.
Nur wo ist die Initialisierungsroutine hin in der man auch andere Dinge zu Beginn initialisieren kann. Ich müsste nämlich irgendwo meine Initialisierungen reinsetzten wenn ich ein Neues Dialogfenster öffne.Gruss
Oliver
-
Die musst du erst noch erstellen.
Entweder per Klassenassistent (VC6) oder per Nachrichtenbehandlungsfunktionen.
Jeweils ist WM_INITDIALOG was du suchst.
-
Ok,
Danke
Ich werds mal probieren.
-
Hallo nochmal,
ich finde WM_INITDIALOG nicht. Unter Eigenschaften --> Meldungen finde ich nur WM_INITMENUE und WM_INITMENUEPOPUP
Ich habe die virtuelle Funktion OnInitDialog, die zur Klasse CDialog gehört gefunden, muss ich diese in meine Initialisierung des Dialogs aufnehmen so wie es auch bei meinem Standard-Dialog der Fall ist?Hier nochmal ein Auszug aus meinem Standard-Dialog:
Header-Datei: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()CPP-Datei:
BOOL CSerial_09Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden // TODO: Hier zusätzliche Initialisierung einfügen if(OpenComPort(0)){ MessageBox(_T("Verbindung zur Mess-Station hergestellt.")); SendData(0,'1'); // Auswahl-Menue } else{ AfxMessageBox(_T("Verbindung zur Mess-Station konnte nicht hergestellt werden."),0,2); } //m_fDatei.Open(_T("D:/config.cfg"), CFile::modeCreate); //m_fDatei.Close(); m_fDatei1.Open(_T("config.cfg"),CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite); m_fDatei1.WriteString(_T("REF: \r\n")); m_fDatei1.Close(); return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten }Oliver
-
Ups, das kommt davon wenn man zu den "Zurückgebliebenen VC6ern" gehört.
Ich hab gerade mal im VC2003 geguckt: Du findest das unter "Überschreibungen".
-
Hallo,
also ich benutze VC++ 2005 hat sich da zufällig nochmals was geändert?
Du musst entschuldigen ich bin VC++ Neuling und kenne mich noch nicht so gut aus.
Weist du wo ich "Überschreibungen" finde? Oder kann es sein das ich das von Hand machen muss?
Also --> virtuelle Funktion "OnInitDialog" anlegen und in dieser die Methode CDialog::OnInitDialog aufrufen?
Woher weis ich, dass beim erzeugen des Dialogs als erstes die Funktion OnInitDialog aufgerufen wird.Ist der Unterschied zwischen VC6.0 und dem jetzigen so groß. Mir ist schon häufiger ein Unterschied aufgefallen. Das blöde ist nur Literatur und Dokumente die man im Internet findet beziehen sich fast ausschliesslich auf die ältere Version von Visual C++.
Oliver
-
oliher schrieb:
also ich benutze VC++ 2005 hat sich da zufällig nochmals was geändert?
Das weiß ich nicht, ich habe zwar VC2005, aber noch nicht installiert.

Du musst entschuldigen ich bin VC++ Neuling und kenne mich noch nicht so gut aus.
Weist du wo ich "Überschreibungen" finde? Oder kann es sein das ich das von Hand machen muss?Also, im VC 2003 geht man auf die Eigenschaften der Klasse. Dann hat man oben so mehrere Icons. u.a. ein Bliz (Ereignisse) und eine Kiste (Überschreibungen).
Ich kann mir nicht vorstellen, dass man das neuerdings von Hand machen muss.
Also --> virtuelle Funktion "OnInitDialog" anlegen und in dieser die Methode CDialog::OnInitDialog aufrufen?
Du kannst es ja mal versuchen. So muss die aussehen:
virtual BOOL OnInitDialog();BOOL CDeinDlg::OnInitDialog() { CDialog::OnInitDialog(); // Hier tu was ;) return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben }Woher weis ich, dass beim erzeugen des Dialogs als erstes die Funktion OnInitDialog aufgerufen wird.
Vertrau Microsoft.

Ist der Unterschied zwischen VC6.0 und dem jetzigen so groß. Mir ist schon häufiger ein Unterschied aufgefallen. Das blöde ist nur Literatur und Dokumente die man im Internet findet beziehen sich fast ausschliesslich auf die ältere Version von Visual C++.
Ja, genau das hält mich erfolgreich von einem Umstieg ab, weil es einfach zu anders ist.
Wer den Umstieg geschafft hat ist völlig begeistert.
Wer schon Erfahrung hat, kann improvisieren und wird nur langsamer.
Aber für Euch Neulinge muss es die Hölle sein.
-
Hey Danke,
es hat funktioniert!
Ich habe die Funktion so wie du sie gepostet hast implementiert und es funktioniert :)!
Microsoft vertrauen?

im Übrigen, was diese Kompatibilität betrifft da sprichst mir aus der Seele

Nochmal vielen Dank für deine Hilfe
Oliver
-
Kein Problem.

oliher schrieb:
Microsoft vertrauen?

Ja, in diesem Fall darfst du das ruhig.

Ich weiß jetzt nicht 100% wie es funktioniert, aber bisher wurde die Funktion immer zum erwarteten Zeitpunkt aufgerufen. Das liegt irgendwo in den Tiefen der MFC begraben.