MDI: Neues Dokument
-
Hallo!
Wie kann ich den Neu...-Befehl aus der Menü- bzw. Symbolleiste in meinem MDI-Programm abfangen?
Ich möchte, dass zuerst ein Dialog angezeigt wird. Erst nachdem dieser geschlossen wurde, soll erst neue Dokument erstellt werden!
greetz
tompo
-
ID_FILE_NEW abfangen
-
Das weiß ich auch, nur wenn ich die OnFileNew mit dem Klassenassistent in der Klasse CProgrammView erstelle und etwas in die Funktion hineinschreibe (z.B. MessageBox("Text")), wird zwar die MessageBox angezeigt, wenn ich dann Neu... klicke, jedoch wird kein neues Dokument erstellt!
Muss ich die OnFileNew in einer anderen Klasse erstellen?
greetz
tompo
-
CProgrammView::OnFileNew() { MessageBox(...); AfxGetApp()->OnFileNew(); // Nachricht MUSS NATÜRLICH weitergeleitet werden! }
-
Ich bekomme die Meldung, dass OnFileNew ein geschütztes Element ist, welches in der Klasse CWinApp deklariert ist, und dass ich nicht darauf zugreifen darf!
Wie kann ich diesen Schutz aufheben bzw. umgehen?greetz
tompo
-
UUps, ja dann gibts noch ne Möglichkeit. Du kannst der MFC mitteilen, dass das Command weiterverarbeitet werden soll.
Dazu in der Message-Map ON_COMMAND_EX statt ON_COMMAND verwendenDer Message-Handler sieht so aus
BOOL OnCommand(UINT nID); // return FALSE to continue routing
Damit müsste es funktionieren
-
Es wird immer noch der gleiche Fehler angezeigt, aber ich denke, dass ich vielleicht etwas falsch gemacht haben könnte.
Hier ist die Deklaration der Funktion in der CProgrammView.h:// Generierte Message-Map-Funktionen public: //{{AFX_MSG(CProgrammView) ... afx_msg BOOL OnFileNew(UINT nID); //}}AFX_MSG
Hier ist die MessageMap in der CProgrammView.cpp:
BEGIN_MESSAGE_MAP(CProgrammView, CFormView) //{{AFX_MSG_MAP(CProgrammView) ... ON_COMMAND_EX(ID_FILE_NEW, OnFileNew) //}}AFX_MSG_MAP // Standard-Druckbefehle ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview) END_MESSAGE_MAP()
Hier ist die Funktion in der CProgrammView:
BOOL CProgrammView::OnFileNew(UINT nID) { // TODO: Code für Befehlsbehandlungsroutine hier einfügen MessageBox("BlaBla"); AfxGetApp()->OnFileNew(); // <-- DIESES ELEMENT IST GESCHÜTZT!!! return FALSE; }
Habe ich irgendwo einen Fehler oder habe ich etwas falsch verstanden?
greetz
tompo
-
Jo, hast Du falsch verstanden, ich sagte, dass es noch eine zweite Möglichkeit gibt, d.h. Du musst den Aufruf weglassen!