Ändern Sie die Beschriftung von MenuItem zur Laufzeit

8

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);

an

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.

    
David Božjak 17.06.2011, 09:03
quelle

4 Antworten

5

Sie sollten zuerst die Befehls-ID des Menüelements aufrufen. Versuchen Sie Folgendes:

%Vor%     
fred.yu 22.02.2013 06:53
quelle
4

Sie könnten versuchen, einen ON_UPDATE_COMMAND_UI -Handler für die Menüoption hinzuzufügen und pCmdUI->SetText() darin aufzurufen.

    
john_e 15.07.2011 20:10
quelle
0

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.

    
Fábio 26.07.2011 17:39
quelle
0

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 .

    
Ajay 21.06.2011 15:23
quelle