Menüeintrag deaktivieren
-
Prizipiell ist mir klar, dass man mit
void CMyView::OnUpdateFileOpen(CCmdUI *pCmdUI) { // TODO: Fügen Sie hier Ihren Befehlsaktualisierungs-UI-Behandlungscode ein. if (Bedingung) pCmdUI->Enable(TRUE); else pCmdUI->Enable(FALSE); }
den Menüeintrag deaktivieren kann. Mein Programm läd immer beim Start die erste Datei aus der MRU-Liste. Standardmäßig werden auch die letzten 4 Dateien in dem Menü angezeigt. Nun möchte ich aber, dass eine bestimmte Benutzergruppe weder andere Dateien öffnen, noch Änderungen speichern kann. Dazu habe ich schon alle Einträge im Menü Datei deaktiviert. Allerdings schaffe ich es nicht, die MRU-Liste auszugrauen. Wie geht das?
-
Auch dafür gibt es IDs in der MFC.
#define ID_FILE_MRU_FIRST 0xE110 #define ID_FILE_MRU_FILE1 0xE110 // range - 16 max #define ID_FILE_MRU_FILE2 0xE111 #define ID_FILE_MRU_FILE3 0xE112 #define ID_FILE_MRU_FILE4 0xE113 #define ID_FILE_MRU_FILE5 0xE114 #define ID_FILE_MRU_FILE6 0xE115 #define ID_FILE_MRU_FILE7 0xE116 #define ID_FILE_MRU_FILE8 0xE117 #define ID_FILE_MRU_FILE9 0xE118 #define ID_FILE_MRU_FILE10 0xE119 #define ID_FILE_MRU_FILE11 0xE11A #define ID_FILE_MRU_FILE12 0xE11B #define ID_FILE_MRU_FILE13 0xE11C #define ID_FILE_MRU_FILE14 0xE11D #define ID_FILE_MRU_FILE15 0xE11E #define ID_FILE_MRU_FILE16 0xE11F #define ID_FILE_MRU_LAST 0xE11F
Einen entsprechenden Update Handler findest Du in CFrameWnd... Du kannst diesen überschreiben. Achtung, dieser Handler lädt auch diese MRU Liste... (verändert also das Menü)
-
Martin Richter schrieb:
Auch dafür gibt es IDs in der MFC.
#define ID_FILE_MRU_FIRST 0xE110 #define ID_FILE_MRU_FILE1 0xE110 // range - 16 max #define ID_FILE_MRU_FILE2 0xE111 #define ID_FILE_MRU_FILE3 0xE112 #define ID_FILE_MRU_FILE4 0xE113 #define ID_FILE_MRU_FILE5 0xE114 #define ID_FILE_MRU_FILE6 0xE115 #define ID_FILE_MRU_FILE7 0xE116 #define ID_FILE_MRU_FILE8 0xE117 #define ID_FILE_MRU_FILE9 0xE118 #define ID_FILE_MRU_FILE10 0xE119 #define ID_FILE_MRU_FILE11 0xE11A #define ID_FILE_MRU_FILE12 0xE11B #define ID_FILE_MRU_FILE13 0xE11C #define ID_FILE_MRU_FILE14 0xE11D #define ID_FILE_MRU_FILE15 0xE11E #define ID_FILE_MRU_FILE16 0xE11F #define ID_FILE_MRU_LAST 0xE11F
Einen entsprechenden Update Handler findest Du in CFrameWnd... Du kannst diesen überschreiben. Achtung, dieser Handler lädt auch diese MRU Liste... (verändert also das Menü)
Soweit ist mir das klar und das hatte ich auch geschrieben. Mein Problem ist, dass wenn ich den Handler überschreibe dann die Datei nicht mehr geöffnet wird. Was muss ich denn in diesem Falle noch aufrufen?
void CMyView::OnUpdateFileMruFile1(CCmdUI *pCmdUI) { // TODO: Fügen Sie hier Ihren Befehlsaktualisierungs-UI-Behandlungscode ein. if (Bedingung) pCmdUI->Enable(TRUE); else pCmdUI->Enable(FALSE); }
Ich hab das ganze in meiner View-Klasse behandelt. Mach ich das im FrameWnd, dann steht dort nur der Eintrag "letzte Datei" und der ist eben mal ausgegraut und mal nicht. Die eigentliche MRU-Liste wird nicht dargestellt. Aber gehen muss das, weil ich das schon in anderen MFC-Programmen gesehen habe.