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?


  • Mod

    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.


Anmelden zum Antworten