MFC CMenu - Unterstriche werden nicht angezeigt



  • Hallo,

    hier ein kurzes Beispiel für mein Problem:

    Ressource:

    IDR_MENU1 MENU DISCARDABLE // ...
    BEGIN
    POPUP "Test"
    BEGIN
    MENUITEM "Zeile(n) &davor einfügen", IDM_INSERT_LINES_BEFORE
    MENUITEM "Zeile(n) da&nach einfügen", IDM_INSERT_LINES_AFTER
    END
    END

    CMenu TestMenu;

    Quellcode:

    BEGIN_MESSAGE_MAP(CsyListCtrl, CListCtrl)
    ...
    ON_WM_CONTEXTMENU()
    END_MESSAGE_MAP()

    void CsyListCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
    {
    CPoint ptMouse;
    CMenu TestMenu;
    TestMenu.LoadMenu(IDR_MENU1);
    CMenu * pop_up_menu = TestMenu.GetSubMenu(0);
    GetCursorPos(&ptMouse);
    pop_up_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,
    ptMouse.x, ptMouse.y, this, NULL);
    TestMenu.DestroyMenu();
    }

    Öffne ich das Kontextmenü mit Shift-F10, werden die Buchstaben nach den "&" unterstrichen dargestellt.
    Öffne ich es mit der rechten Maustaste, sind sie nicht unterstrichen.

    Die Auswahl der Menüpunkte mit "d" und "n" funktioniert in beiden Fällen.

    Was mache ich falsch bzw. wie kann ich erreichen, dass die Buchstaben in allen Fällen unterstrichen dargestellt werden?

    Wenn ich das Menü dynamisch zur Laufzeit erstelle mit CreatePopupMenu und InsertMenu, verhält es sich genauso.

    Danke und Gruß
    Christian



  • Dies ist ein Windows-Feature. Ich nehme mal an, du benutzt Windows 10: How to Turn On or Off Underline Access Key Shortcuts in Menus in Windows 10



  • @Th69 Hey, super!!!! Vielen Dank!!!



  • Kann man das auch programmiertechnisch einschalten? In unserem Hauptprogramm im Zeichnugsbaum funktioniert nämlich alles. In den Projektoptionen, einer dll, an der ich arbeite, nicht.
    Das wundert mich schon.

    Danke und Gruß
    Christian



  • Eine Möglichkeit steht doch im vom Th69 verlinkten Artikel unter "Option Three: Turn On or Off Underline Access Key Shortcuts in Menus using a REG file". Das machste dann halt nich über nen Registry Import, sondern schreibst direkt in die Registry. Vielleicht kommst du ohne Admin Rechte aus, weil ja nur in den HKCU Zweig geschrieben wird, aber eine Änderungen hat Auswirkung auf alle Programme, die vom Benutzer gestartet werden.



  • Ist denn euer Hauptprogramm auch mit MFC entwickelt, oder benutzt es ein anderes UI-Framework?



  • @DocShoe Ja, aber für alle Programme wollte ich das eigentlich nicht einschalten...



  • Und warum möchtest du denn die Unterstriche dauerhaft sichtbar machen? Der Anwender kann ja immer mit Shift+RM diese anzeigen lassen.



  • @Th69 Wir nutzen Stingray Studio, aber ich glaube, das TrackPopupMenu wird direkt in MFC aufgerufen.

    Shift-RM funktioniert nicht, weder in meinem Programm noch in Visual Studio 2022. 😞



  • Vllt. benutzt die Stingray GUI gar nicht die MFC bzw. WinAPI und zeichnet die Menüs selber (und daher ohne Verwendung des Registry-Eintrags)?

    Und du hast recht, Shift+RM funktioniert wohl nur direkt bei dem Desktop-Kontextmenü, nicht in anderen Programmen (habe ich sowohl mit Notepad, als auch mit VCL- und sogar .NET Windows Forms Programmen probiert), nur das explizite Verwenden über die Tastatur (Shift+F10 bzw. Kontextmenü-Taste) zeigen die Unterstriche in den Menüs an.
    MS geht wohl davon aus, wenn man die Maus zum Anzeigen des Kontextmenüs benutzt, daß man dann auch weiterhin die Maus zum Auswählen eines Menü-Eintrags benutzt und dann die Unterstriche störend sind.



  • @Th69 Gucke ich mit Montag weiter an. Danke nochmal. 🙂


Anmelden zum Antworten