Ich habe ein Menü mit allen möglichen Menüpunkten, wie Sie es normalerweise tun würden. Jedes MenuItem (Schaltfläche) hat eine Beschriftung und ich möchte diese Beschriftung zur Laufzeit ändern. Auf einem normalen Button, der eigentlich kein Problem ist, rufe ich einfach GetDlgItem(ID)->SetWindowText(CString);
Allerdings kann ich das nicht auf den Menüpunkten machen, da ich keine IDs zu ihnen zuweisen kann. Das ID-Feld im Eigenschafteneditor sagt eigentlich "ID kann nicht bearbeitet werden".
Wie ändere ich den Text des Menüelements zur Laufzeit?
BEARBEITEN : Ich habe versucht, CMenu :: ModifyMenu zu verwenden, aber ich war nicht erfolgreich. Ich weiß nicht, wie ich die zu ändernde Schaltfläche (Element) festlegen soll. Außerdem habe ich Zweifel an der Richtigkeit der Art und Weise, wie ich den CString als Argument übergebe.
Dies ist mein (fehlgeschlagener) Versuch:
%Vor%Dies (der Aufruf der ModifyMenu-Methode) löst einen Debug-Assertionsfehler aus. Bitte nicht, dass ich nicht weiß, was nIDNewItem.
Sind Sie sicher, dass der Aufruf von GetMenu ein gültiges CMenu zurückgibt? Versuchen Sie, nur GetMenu () anstelle von m_wndToolBar.GetMenu () aufzurufen.
Ihr Aufruf an ModifyMenu scheint richtig zu sein, wenn Sie eine MF_BYPOSITION übergeben, brauchen Sie den 3. Parameter nicht. Beachten Sie auch, dass der 1. Parameter (Position) bei 0 beginnt.
Menüs sind keine Fenster, sie sind Menüs. Sie können GetDlgItem
nicht verwenden, um auf ein Menü zuzugreifen.
In MFC kann CMenu
class zum Erstellen und / oder Steuern von Menüs verwendet werden. CMenu :: ModifyMenu könnte das Richtige sein, nach dem Sie suchen .
Tags und Links user-interface mfc menuitem menu visual-studio-2003