CMenu
-Klasse
Eine Kapselung von Windows- HMENU
.
Syntax
class CMenu : public CObject
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CMenu::CMenu |
Erstellt ein CMenu -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CMenu::AppendMenu |
Fügt ein neues Element am Ende dieses Menüs an. |
CMenu::Attach |
Fügt ein Windows-Menühandle an ein CMenu Objekt an. |
CMenu::CheckMenuItem |
Platziert ein Häkchen neben oder entfernt ein Häkchen aus einem Menüelement im Popupmenü. |
CMenu::CheckMenuRadioItem |
Platziert ein Optionsfeld neben einem Menüelement und entfernt das Optionsfeld aus allen anderen Menüelementen in der Gruppe. |
CMenu::CreateMenu |
Erstellt ein leeres Menü und fügt es an ein CMenu Objekt an. |
CMenu::CreatePopupMenu |
Erstellt ein leeres Popupmenü und fügt es an ein CMenu Objekt an. |
CMenu::DeleteMenu |
Löscht ein angegebenes Element aus dem Menü. Wenn das Menüelement über ein zugeordnetes Popupmenü verfügt, zerstört das Handle für das Popupmenü und gibt den darin verwendeten Speicher frei. |
CMenu::DeleteTempMap |
Löscht alle temporären CMenu Objekte, die von der FromHandle Memberfunktion erstellt wurden. |
CMenu::DestroyMenu |
Zerstört das Menü, das an ein CMenu Objekt angefügt ist, und gibt alle Arbeitsspeicher frei, die das Menü belegt hat. |
CMenu::Detach |
Trennt ein Windows-Menühandle von einem CMenu Objekt und gibt den Handle zurück. |
CMenu::DrawItem |
Wird vom Framework aufgerufen, wenn sich ein visueller Aspekt eines vom Besitzer gezeichneten Menüs ändert. |
CMenu::EnableMenuItem |
Aktiviert, deaktiviert oder abgeblendet (grau) ein Menüelement. |
CMenu::FromHandle |
Gibt einen Zeiger auf ein Objekt zurück, das über ein CMenu Windows-Menühandle verfügt. |
CMenu::GetDefaultItem |
Bestimmt das Standardmenüelement im angegebenen Menü. |
CMenu::GetMenuContextHelpId |
Ruft die Hilfekontext-ID ab, die dem Menü zugeordnet ist. |
CMenu::GetMenuInfo |
Ruft Informationen in einem bestimmten Menü ab. |
CMenu::GetMenuItemCount |
Bestimmt die Anzahl der Elemente in einem Popupmenü oder einem Menü auf oberster Ebene. |
CMenu::GetMenuItemID |
Ruft den Menüelementbezeichner für ein Menüelement an der angegebenen Position ab. |
CMenu::GetMenuItemInfo |
Ruft Informationen zu einem Menüelement ab. |
CMenu::GetMenuState |
Gibt den Status des angegebenen Menüelements oder die Anzahl der Elemente in einem Popupmenü zurück. |
CMenu::GetMenuString |
Ruft die Beschriftung des angegebenen Menüelements ab. |
CMenu::GetSafeHmenu |
Gibt den m_hMenu Umbruch dieses CMenu Objekts zurück. |
CMenu::GetSubMenu |
Ruft einen Zeiger auf ein Popupmenü ab. |
CMenu::InsertMenu |
Fügt ein neues Menüelement an der angegebenen Position ein, wobei andere Elemente nach unten im Menü verschoben werden. |
CMenu::InsertMenuItem |
Fügt ein neues Menüelement an der angegebenen Position in einem Menü ein. |
CMenu::LoadMenu |
Lädt eine Menüressource aus der ausführbaren Datei und fügt sie an ein CMenu Objekt an. |
CMenu::LoadMenuIndirect |
Lädt ein Menü aus einer Menüvorlage im Arbeitsspeicher und fügt es an ein CMenu Objekt an. |
CMenu::MeasureItem |
Wird vom Framework aufgerufen, um Menüdimensionen zu bestimmen, wenn ein vom Besitzer gezeichnetes Menü erstellt wird. |
CMenu::ModifyMenu |
Ändert ein vorhandenes Menüelement an der angegebenen Position. |
CMenu::RemoveMenu |
Löscht ein Menüelement mit einem zugeordneten Popupmenü aus dem angegebenen Menü. |
CMenu::SetDefaultItem |
Legt das Standardmenüelement für das angegebene Menü fest. |
CMenu::SetMenuContextHelpId |
Legt die Hilfekontext-ID fest, die dem Menü zugeordnet werden soll. |
CMenu::SetMenuInfo |
Legt Informationen für ein bestimmtes Menü fest. |
CMenu::SetMenuItemBitmaps |
Ordnet die angegebenen Häkchenbitmaps einem Menüelement zu. |
CMenu::SetMenuItemInfo |
Ändert Informationen zu einem Menüelement. |
CMenu::TrackPopupMenu |
Zeigt ein unverankertes Popupmenü an der angegebenen Position an und verfolgt die Auswahl von Elementen im Popupmenü. |
CMenu::TrackPopupMenuEx |
Zeigt ein unverankertes Popupmenü an der angegebenen Position an und verfolgt die Auswahl von Elementen im Popupmenü. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
CMenu::operator HMENU |
Ruft das Handle des Menüobjekts ab. |
CMenu::operator != |
Bestimmt, ob zwei Menüobjekte nicht gleich sind. |
CMenu::operator == |
Bestimmt, ob zwei Menüobjekte gleich sind. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CMenu::m_hMenu |
Gibt das Handle an, das dem Objekt zugeordnet ist CMenu . |
Hinweise
Es stellt Memberfunktionen zum Erstellen, Nachverfolgen, Aktualisieren und Zerstören eines Menüs bereit.
Erstellen Sie ein CMenu
Objekt im Stapelframe als lokal, und rufen Sie CMenu
dann die Memberfunktionen auf, um das neue Menü nach Bedarf zu bearbeiten. Rufen Sie CWnd::SetMenu
als Nächstes auf, um das Menü auf ein Fenster festzulegen, gefolgt von einem Aufruf der Memberfunktion des CMenu
Detach
Objekts. Die CWnd::SetMenu
Memberfunktion legt das Menü des Fensters auf das neue Menü fest, bewirkt, dass das Fenster neu gezeichnet wird, um die Menüänderung widerzuspiegeln, und übergibt auch den Besitz des Menüs an das Fenster. Durch den Aufruf zum Detach
Trennen des CMenu
Objekts wird das HMENU
Objekt getrennt. Wenn die lokale CMenu
Variable den Bereich übergibt, versucht der CMenu
Objektdestruktor nicht, ein Menü zu zerstören, das er nicht mehr besitzt. Das Menü selbst wird automatisch zerstört, wenn das Fenster zerstört wird.
Sie können die LoadMenuIndirect
Memberfunktion verwenden, um ein Menü aus einer Vorlage im Arbeitsspeicher zu erstellen, aber ein Menü, das von einer Ressource durch einen Aufruf LoadMenu
erstellt wird, wird einfacher verwaltet, und die Menüressource selbst kann vom Menü-Editor erstellt und geändert werden.
Vererbungshierarchie
CMenu
Anforderungen
Header: afxwin.h
CMenu::AppendMenu
Fügt ein neues Element am Ende eines Menüs an.
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nFlags
Gibt Informationen zum Status des neuen Menüelements an, wenn es dem Menü hinzugefügt wird. Sie besteht aus einem oder mehreren der im Abschnitt "Hinweise" aufgeführten Werte.
nIDNewItem
Gibt entweder die Befehls-ID des neuen Menüelements oder, falls nFlags
festgelegt, MF_POPUP
das Menühandle (HMENU
) eines Popupmenüs an. Der nIDNewItem
Parameter wird ignoriert (nicht erforderlich), wenn nFlags
er auf MF_SEPARATOR
.
lpszNewItem
Gibt den Inhalt des neuen Menüelements an. Der nFlags
Parameter wird wie folgt interpretiert lpszNewItem
:
nFlags |
Interpretation von lpszNewItem |
---|---|
MF_OWNERDRAW |
Enthält einen von der Anwendung bereitgestellten 32-Bit-Wert, den die Anwendung verwenden kann, um zusätzliche Daten zu verwalten, die dem Menüelement zugeordnet sind. Dieser 32-Bit-Wert steht der Anwendung beim Verarbeiten WM_MEASUREITEM und WM_DRAWITEM Nachrichten zur Verfügung. Der Wert wird im Element der Struktur gespeichert, die itemData mit diesen Nachrichten bereitgestellt wird. |
MF_STRING |
Enthält einen Zeiger auf eine mit Null beendete Zeichenfolge. Dies ist die Standardinterpretation. |
MF_SEPARATOR |
Der lpszNewItem Parameter wird ignoriert (nicht erforderlich). |
pBmp
Verweist auf ein CBitmap
Objekt, das als Menüelement verwendet wird.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Die Anwendung kann den Status des Menüelements durch Festlegen von Werten in nFlags
. Wenn nIDNewItem
ein Popupmenü angegeben wird, wird es Teil des Menüs, an das es angefügt wird. Wenn dieses Menü zerstört wird, wird auch das angefügte Menü zerstört. Ein angefügtes Menü sollte von einem CMenu
Objekt getrennt werden, um Konflikte zu vermeiden. Beachten Sie, dass MF_STRING
die MF_OWNERDRAW
Bitmapversion von AppendMenu
.
In der folgenden Liste werden die Flags beschrieben, die möglicherweise festgelegt nFlags
werden:
MF_CHECKED
Dient als Umschaltfläche,MF_UNCHECKED
um das Standardkontrollkästchen neben dem Element zu platzieren. Wenn die Anwendung Häkchenbitmaps bereitstellt (siehe MemberfunktionSetMenuItemBitmaps
), wird die Bitmap "Häkchen bei" angezeigt.MF_UNCHECKED
Dient als Umschaltfläche zumMF_CHECKED
Entfernen eines Häkchens neben dem Element. Wenn die Anwendung Häkchenbitmaps bereitstellt (siehe MemberfunktionSetMenuItemBitmaps
), wird die Bitmap "Häkchen deaktiviert" angezeigt.MF_DISABLED
Deaktiviert das Menüelement, sodass es nicht ausgewählt, aber nicht abgeblendet wird.MF_ENABLED
Aktiviert das Menüelement, sodass es ausgewählt und aus dem abgeblendeten Zustand wiederhergestellt werden kann.MF_GRAYED
Deaktiviert das Menüelement, sodass es nicht ausgewählt und abgeblendet werden kann.MF_MENUBARBREAK
Platziert das Element in einer neuen Zeile in statischen Menüs oder in einer neuen Spalte in Popupmenüs. Die neue Popupmenüspalte wird durch eine vertikale Trennlinie von der alten Spalte getrennt.MF_MENUBREAK
Platziert das Element in einer neuen Zeile in statischen Menüs oder in einer neuen Spalte in Popupmenüs. Es wird keine Trennlinie zwischen den Spalten platziert.MF_OWNERDRAW
Gibt an, dass das Element ein Besitzer-Draw-Element ist. Wenn das Menü zum ersten Mal angezeigt wird, erhält das Fenster, das das Menü besitzt, eineWM_MEASUREITEM
Nachricht, die die Höhe und Breite des Menüelements abruft. DieWM_DRAWITEM
Nachricht ist die Nachricht, die gesendet wird, wenn der Besitzer die visuelle Darstellung des Menüelements aktualisieren muss. Diese Option ist für ein Menüelement der obersten Ebene ungültig.MF_POPUP
Gibt an, dass dem Menüelement ein Popupmenü zugeordnet ist. Der ID-Parameter gibt ein Handle für ein Popupmenü an, das dem Element zugeordnet werden soll. Dies wird zum Hinzufügen eines Popupmenüs auf oberster Ebene oder eines hierarchischen Popupmenüs zu einem Popupmenüelement verwendet.MF_SEPARATOR
Zeichnet eine horizontale Trennlinie. Kann nur in einem Popupmenü verwendet werden. Diese Linie kann nicht abgeblendet, deaktiviert oder hervorgehoben werden. Andere Parameter werden ignoriert.MF_STRING
Gibt an, dass das Menüelement eine Zeichenfolge ist.
Jede der folgenden Gruppen listet Flags auf, die sich gegenseitig ausschließen und nicht zusammen verwendet werden können:
MF_DISABLED
,MF_ENABLED
undMF_GRAYED
MF_STRING
,MF_OWNERDRAW
,MF_SEPARATOR
und die BitmapversionMF_MENUBARBREAK
undMF_MENUBREAK
MF_CHECKED
undMF_UNCHECKED
Wenn ein Menü, das sich in einem Fenster befindet, geändert wird (unabhängig davon, ob das Fenster angezeigt wird), sollte die Anwendung aufrufen CWnd::DrawMenuBar
.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::CreateMenu
.
CMenu::Attach
Fügt ein vorhandenes Windows-Menü an ein CMenu
Objekt an.
BOOL Attach(HMENU hMenu);
Parameter
hMenu
Gibt ein Handle für ein Windows-Menü an.
Rückgabewert
Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.
Hinweise
Diese Funktion sollte nicht aufgerufen werden, wenn dem Objekt bereits ein Menü zugeordnet CMenu
ist. Der Menüziehpunkt wird im m_hMenu
Datenelement gespeichert.
Wenn das Menü, das Sie bearbeiten möchten, bereits einem Fenster zugeordnet ist, können Sie die CWnd::GetMenu
Funktion verwenden, um ein Handle zum Menü abzurufen.
Beispiel
CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);
// Now you can manipulate the window's menu as a CMenu
// object...
mnu.Detach();
CMenu::CheckMenuItem
Fügt Häkchen zu Oder entfernt Häkchen aus Menüelementen im Popupmenü.
UINT CheckMenuItem(
UINT nIDCheckItem,
UINT nCheck);
Parameter
nIDCheckItem
Gibt das zu überprüfende Menüelement an, wie durch nCheck
.
nCheck
Gibt an, wie das Menüelement überprüft und wie die Position des Elements im Menü bestimmt wird. Der nCheck
Parameter kann eine Kombination aus MF_CHECKED
oder MF_UNCHECKED
mit oder MF_BYCOMMAND
mit MF_BYPOSITION
Flags sein. Diese Flags können mithilfe des bitweisen OR-Operators kombiniert werden. Sie haben die folgenden Bedeutungen:
MF_BYCOMMAND
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung.MF_BYPOSITION
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0.MF_CHECKED
Dient als Umschaltfläche,MF_UNCHECKED
um das Standardkontrollkästchen neben dem Element zu platzieren.MF_UNCHECKED
Dient als Umschaltfläche zumMF_CHECKED
Entfernen eines Häkchens neben dem Element.
Rückgabewert
Der vorherige Status des Elements: MF_CHECKED
oder MF_UNCHECKED
, wenn 0xFFFFFFFF
das Menüelement nicht vorhanden war.
Hinweise
Der nIDCheckItem
Parameter gibt das zu ändernde Element an.
Der nIDCheckItem
Parameter kann ein Popupmenüelement sowie ein Menüelement identifizieren. Es sind keine speziellen Schritte erforderlich, um ein Popupmenüelement zu überprüfen. Menüelemente der obersten Ebene können nicht überprüft werden. Ein Popupmenüelement muss nach Position überprüft werden, da kein Menüelementbezeichner zugeordnet ist.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::GetMenuState
.
CMenu::CheckMenuRadioItem
Überprüft ein angegebenes Menüelement und macht es zu einem Optionselement.
BOOL CheckMenuRadioItem(
UINT nIDFirst,
UINT nIDLast,
UINT nIDItem,
UINT nFlags);
Parameter
nIDFirst
Gibt (je nach Wert) nFlags
das erste Menüelement in der Optionsfeldgruppe an (als ID oder Offset).
nIDLast
Gibt (je nach Wert) nFlags
das letzte Menüelement in der Optionsfeldgruppe an (als ID oder Offset).
nIDItem
Gibt (je nach Wert) nFlags
das Element in der Gruppe an , das mit einem Optionsfeld überprüft wird (als ID oder Offset).
nFlags
Gibt die Interpretation von nIDFirst
, nIDLast
und nIDItem
auf folgende Weise an:
nFlags | Interpretation |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
Rückgabewert
Nonzero bei erfolgreicher Ausführung; andernfalls 0
Hinweise
Gleichzeitig deaktiviert die Funktion alle anderen Menüelemente in der zugeordneten Gruppe und löscht das Optionselementtypkennzeichnung für diese Elemente. Das aktivierte Element wird mithilfe einer Optionsfeld-Bitmap (oder aufzählungszeichen) anstelle einer Häkchenbitmap angezeigt.
Beispiel
Ein Beispiel hierfür finden Sie unter ON_COMMAND_RANGE
.
CMenu::CMenu
Erstellt ein leeres Menü und fügt es an ein CMenu
Objekt an.
CMenu();
Hinweise
Das Menü wird erst erstellt, wenn Sie eine der Create- oder Load-Memberfunktionen von CMenu
:
CMenu::CreateMenu
Erstellt ein Menü und fügt es an das CMenu
Objekt an.
BOOL CreateMenu();
Rückgabewert
Nonzero, wenn das Menü erfolgreich erstellt wurde; andernfalls 0.
Hinweise
Das Menü ist anfangs leer. Menüelemente können mithilfe der AppendMenu
Funktion oder InsertMenu
Member hinzugefügt werden.
Wenn das Menü einem Fenster zugewiesen ist, wird es automatisch zerstört, wenn das Fenster zerstört wird.
Vor dem Beenden muss eine Anwendung Systemressourcen freigeben, die einem Menü zugeordnet sind, wenn das Menü keinem Fenster zugewiesen ist. Eine Anwendung gibt ein Menü frei, indem die DestroyMenu
Memberfunktion aufgerufen wird.
Beispiel
// The code fragment below shows how to create a new menu for the
// application window using CreateMenu() and CreatePopupMenu().
// Then, the created menu will replace the current menu of the
// application. The old menu will be destroyed with DestroyMenu().
// NOTE: The code fragment below is done in a CFrameWnd-derived class.
// Create a new menu for the application window.
VERIFY(m_NewMenu.CreateMenu());
// Create a "File" popup menu and insert this popup menu to the
// new menu of the application window. The "File" menu has only
// one menu item, i.e. "Exit".
VERIFY(m_FileMenu.CreatePopupMenu());
m_FileMenu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("E&xit"));
m_NewMenu.AppendMenu(MF_POPUP, (UINT_PTR)m_FileMenu.m_hMenu, _T("&File"));
// Remove and destroy old menu
SetMenu(NULL);
CMenu *old_menu = CMenu::FromHandle(m_hMenuDefault);
old_menu->DestroyMenu();
// Add new menu.
SetMenu(&m_NewMenu);
// Assign default menu
m_hMenuDefault = m_NewMenu.m_hMenu;
CMenu::CreatePopupMenu
Erstellt ein Popupmenü und fügt es an das CMenu
Objekt an.
BOOL CreatePopupMenu();
Rückgabewert
Nonzero, wenn das Popupmenü erfolgreich erstellt wurde; andernfalls 0.
Hinweise
Das Menü ist anfangs leer. Menüelemente können mithilfe der AppendMenu
Funktion oder InsertMenu
Member hinzugefügt werden. Die Anwendung kann das Popupmenü zu einem vorhandenen Menü oder Popupmenü hinzufügen. Die TrackPopupMenu
Memberfunktion kann zum Anzeigen dieses Menüs als unverankerte Popupmenü und zum Nachverfolgen von Auswahlen im Popupmenü verwendet werden.
Wenn das Menü einem Fenster zugewiesen ist, wird es automatisch zerstört, wenn das Fenster zerstört wird. Wenn das Menü zu einem vorhandenen Menü hinzugefügt wird, wird es automatisch zerstört, wenn dieses Menü zerstört wird.
Vor dem Beenden muss eine Anwendung Systemressourcen freigeben, die einem Popupmenü zugeordnet sind, wenn das Menü keinem Fenster zugewiesen ist. Eine Anwendung gibt ein Menü frei, indem die DestroyMenu
Memberfunktion aufgerufen wird.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::CreateMenu
.
CMenu::DeleteMenu
Löscht ein Element aus dem Menü.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parameter
nPosition
Gibt das menüelement an, das gelöscht werden soll, wie es bestimmt wird nFlags
.
nFlags
Wird verwendet, um auf folgende Weise zu interpretieren nPosition
:
nFlags |
Interpretation von nPosition |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Wenn das Menüelement über ein zugeordnetes Popupmenü verfügt, DeleteMenu
zerstört das Handle zum Popupmenü und gibt den vom Popupmenü verwendeten Speicher frei.
Wenn ein Menü, das sich in einem Fenster befindet, geändert wird (unabhängig davon, ob das Fenster angezeigt wird), muss die Anwendung aufrufen CWnd::DrawMenuBar
.
Beispiel
Ein Beispiel hierfür finden Sie unter CWnd::GetMenu
.
CMenu::DeleteTempMap
Wird automatisch vom CWinApp
Leerlaufzeithandler aufgerufen, werden alle temporären CMenu
Objekte gelöscht, die von der FromHandle
Memberfunktion erstellt wurden.
static void PASCAL DeleteTempMap();
Hinweise
DeleteTempMap
trennt das Windows-Menüobjekt, das an ein temporäres CMenu
Objekt angefügt ist, bevor das CMenu
Objekt gelöscht wird.
Beispiel
// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();
CMenu::DestroyMenu
Zerstört das Menü und alle verwendeten Windows-Ressourcen.
BOOL DestroyMenu();
Rückgabewert
Nonzero, wenn das Menü zerstört wird; andernfalls 0.
Hinweise
Das Menü wird vom CMenu
Objekt getrennt, bevor es zerstört wird. Die Windows-Funktion DestroyMenu
wird automatisch im CMenu
Destruktor aufgerufen.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::CreateMenu
.
CMenu::Detach
Trennt ein Windows-Menü von einem CMenu
Objekt und gibt den Handle zurück.
HMENU Detach();
Rückgabewert
Das Handle vom Typ HMENU
" in ein Windows-Menü, falls erfolgreich; andernfalls NULL
.
Hinweise
Das m_hMenu
Datenelement ist auf NULL
.
Beispiel
CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);
// Now you can manipulate the window's menu as a CMenu
// object...
mnu.Detach();
CMenu::DrawItem
Wird vom Framework aufgerufen, wenn sich ein visueller Aspekt eines vom Besitzer gezeichneten Menüs ändert.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameter
lpDrawItemStruct
Ein Zeiger auf eine DRAWITEMSTRUCT
Struktur, die Informationen zum erforderlichen Zeichnungstyp enthält.
Hinweise
Das itemAction
Element der DRAWITEMSTRUCT
Struktur definiert die Zeichnungsaktion, die ausgeführt werden soll. Überschreiben Sie diese Memberfunktion, um die Zeichnung für ein Besitzer-Draw-Objekt CMenu
zu implementieren. Die Anwendung sollte alle GDI-Objekte (Graphics Device Interface) wiederherstellen, die für den anzeigekontext ausgewählt lpDrawItemStruct
wurden, bevor diese Memberfunktion beendet wird.
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnDrawItem
for a description of the DRAWITEMSTRUCT
structure.
Beispiel
Der folgende Code stammt aus dem MFC-Beispiel CTRLTEST
:
// Override DrawItem() to implement drawing for an owner-draw CMenu object.
// CColorMenu is a CMenu-derived class.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC *pDC = CDC::FromHandle(lpDIS->hDC);
COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data
if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
// Paint the color item in the color requested
CBrush br(cr);
pDC->FillRect(&lpDIS->rcItem, &br);
}
if ((lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
{
// item has been selected - hilite frame
COLORREF crHilite = RGB(255 - GetRValue(cr),
255 - GetGValue(cr), 255 - GetBValue(cr));
CBrush br(crHilite);
pDC->FrameRect(&lpDIS->rcItem, &br);
}
if (!(lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & ODA_SELECT))
{
// Item has been de-selected -- remove frame
CBrush br(cr);
pDC->FrameRect(&lpDIS->rcItem, &br);
}
}
CMenu::EnableMenuItem
Aktiviert, deaktiviert oder dimsiert ein Menüelement.
UINT EnableMenuItem(
UINT nIDEnableItem,
UINT nEnable);
Parameter
nIDEnableItem
Gibt das zu aktivierende Menüelement an, wie durch nEnable
. Dieser Parameter kann Popupmenüelemente sowie Standardmenüelemente angeben.
nEnable
Gibt die auszuführende Aktion an. Es kann eine Kombination aus MF_DISABLED
, , MF_ENABLED
oder MF_GRAYED
, mit MF_BYCOMMAND
oder MF_BYPOSITION
. Diese Werte können mit dem bitweisen C++-OR-Operator (|
) kombiniert werden. Diese Werte haben die folgenden Bedeutungen:
MF_BYCOMMAND
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung.MF_BYPOSITION
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0.MF_DISABLED
Deaktiviert das Menüelement, sodass es nicht ausgewählt, aber nicht abgeblendet wird.MF_ENABLED
Aktiviert das Menüelement, sodass es ausgewählt und aus dem abgeblendeten Zustand wiederhergestellt werden kann.MF_GRAYED
Deaktiviert das Menüelement, sodass es nicht ausgewählt und abgeblendet werden kann.
Rückgabewert
Vorheriger Zustand (MF_DISABLED
, MF_ENABLED
oder ) oder MF_GRAYED
-1, wenn ungültig.
Hinweise
Die CreateMenu
Funktionen , InsertMenu
, ModifyMenu
und LoadMenuIndirect
Member können auch den Zustand (aktiviert, deaktiviert oder abgeblendet) eines Menüelements festlegen.
Für die Verwendung des MF_BYPOSITION
Werts muss eine Anwendung das richtige CMenu
verwenden. Wenn die CMenu
Menüleiste verwendet wird, ist ein Menüelement der obersten Ebene (ein Element in der Menüleiste) betroffen. Um den Status eines Elements in einem Popup- oder geschachtelten Popupmenü nach Position festzulegen, muss eine Anwendung das CMenu
Popupmenü angeben.
Wenn eine Anwendung die MF_BYCOMMAND
Kennzeichnung angibt, überprüft Windows alle Popupmenüelemente, die CMenu
untergeordnet sind. Daher reicht die Verwendung CMenu
der Menüleiste aus, es sei denn, doppelte Menüelemente sind vorhanden.
Beispiel
// The code fragment below shows how to disable (and gray out) the
// File\New menu item.
// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
// CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are
// needed, and CMenu::EnableMenuItem() will work as expected.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
CMenu::FromHandle
Gibt einen Zeiger auf ein CMenu
Objekt zurück, das einem Windows-Handle auf ein Menü zugewiesen ist.
static CMenu* PASCAL FromHandle(HMENU hMenu);
Parameter
hMenu
Ein Windows-Handle zu einem Menü.
Rückgabewert
Ein Zeiger auf einen CMenu
, der vorübergehend oder dauerhaft sein kann.
Hinweise
Wenn ein CMenu
Objekt noch nicht an das Windows-Menüobjekt angefügt ist, wird ein temporäres CMenu
Objekt erstellt und angefügt.
Dieses temporäre CMenu
Objekt ist nur gültig, bis die Anwendung das nächste Mal leerlauf in der Ereignisschleife hat, zu dem zeitpunkt alle temporären Objekte gelöscht werden.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::CreateMenu
.
CMenu::GetDefaultItem
Bestimmt das Standardmenüelement im angegebenen Menü.
UINT GetDefaultItem(
UINT gmdiFlags,
BOOL fByPos = FALSE);
Parameter
gmdiFlags
Wert, der angibt, wie die Funktion nach Menüelementen sucht. Dieser Parameter kann keine, eine oder eine Kombination der folgenden Werte sein:
Wert | Bedeutung |
---|---|
GMDI_GOINTOPOPUPS |
Gibt an, dass, wenn das Standardelement ein Untermenü ist, das ein Untermenü öffnet, die Funktion rekursiv im entsprechenden Untermenü suchen soll. Wenn das Untermenü kein Standardelement aufweist, identifiziert der Rückgabewert das Element, das das Untermenü öffnet. Standardmäßig gibt die Funktion das erste Standardelement im angegebenen Menü zurück, unabhängig davon, ob es sich um ein Element handelt, das ein Untermenü öffnet. |
GMDI_USEDISABLED |
Gibt an, dass die Funktion ein Standardelement zurückgibt, auch wenn es deaktiviert ist. Standardmäßig überspringt die Funktion deaktivierte oder abgeblendte Elemente. |
fByPos
Wert, der angibt, ob der Bezeichner des Menüelements oder seine Position abgerufen werden soll. Wenn dieser Parameter lautet FALSE
, wird der Bezeichner zurückgegeben. Andernfalls wird die Position zurückgegeben.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert der Bezeichner oder die Position des Menüelements. Wenn die Funktion fehlschlägt, lautet der Rückgabewert - 1.
Hinweise
Diese Memberfunktion implementiert das Verhalten der Win32-Funktion GetMenuDefaultItem
, wie im Windows SDK beschrieben.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::GetMenuContextHelpId
Ruft die Kontexthilfe-ID ab, die mit CMenu
.
DWORD GetMenuContextHelpId() const;
Rückgabewert
Die Kontexthilfe-ID, die CMenu
derzeit zugeordnet ist, wenn sie einen hat; andernfalls Null.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::GetMenuInfo
Ruft Informationen für ein Menü ab.
BOOL GetMenuInfo(LPMENUINFO lpcmi) const;
Parameter
lpcmi
Ein Zeiger auf eine MENUINFO
Struktur, die Informationen für das Menü enthält.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null; andernfalls ist der Rückgabewert null.
Hinweise
Rufen Sie diese Funktion auf, um Informationen zum Menü abzurufen.
CMenu::GetMenuItemCount
Bestimmt die Anzahl der Elemente in einem Popupmenü oder einem Menü auf oberster Ebene.
UINT GetMenuItemCount() const;
Rückgabewert
Die Anzahl der Elemente im Menü, wenn die Funktion erfolgreich ist; andernfalls -1.
Beispiel
Ein Beispiel hierfür finden Sie unter CWnd::GetMenu
.
CMenu::GetMenuItemID
Ruft den Menüelementbezeichner für ein Menüelement ab, das sich an der position befindet, die durch nPos
.
UINT GetMenuItemID(int nPos) const;
Parameter
nPos
Gibt die Position (nullbasiert) des Menüelements an, dessen ID abgerufen wird.
Rückgabewert
Die Element-ID für das angegebene Element in einem Popupmenü, wenn die Funktion erfolgreich ist. Wenn das angegebene Element ein Popupmenü (im Gegensatz zu einem Element im Popupmenü) ist, lautet der Rückgabewert -1. Entspricht nPos
einem SEPARATOR
Menüelement, lautet der Rückgabewert 0.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::GetMenuItemInfo
Ruft Informationen zu einem Menüelement ab.
BOOL GetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Bezeichner oder Position des Menüelements, um Informationen zu erhalten. Die Bedeutung dieses Parameters hängt vom Wert von ByPos
.
lpMenuItemInfo
Ein Zeiger auf ein MENUITEMINFO
, wie im Windows SDK beschrieben, das Informationen zum Menü enthält.
fByPos
Wert, der die Bedeutung von nIDItem
. Ist standardmäßig , was angibt, ByPos
FALSE
dass uItem ein Menüelementbezeichner ist. Wenn sie nicht auf <ByPos
festgelegt ist, wird eine Menüelementposition angegeben.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null. Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, verwenden Sie die Win32-Funktion GetLastError
, wie im Windows SDK beschrieben.
Hinweise
Diese Memberfunktion implementiert das Verhalten der Win32-Funktion GetMenuItemInfo
, wie im Windows SDK beschrieben. Beachten Sie, dass Sie in der MFC-Implementierung von GetMenuItemInfo
"Kein Handle" für ein Menü verwenden.
Beispiel
// CMainFrame::OnToggleTestMenuInfo() is a menu command handler for
// "Toggle Info" menu item (whose resource id is ID_MENU_TOGGLEINFO). It
// toggles the checked or unchecked state of the "Toggle Info" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuItemInfo()
{
// Get the popup menu which contains the "Toggle Info" menu item.
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(4);
// Check the state of the "Toggle Info" menu item. Check the menu item
// if it is currently unchecked. Otherwise, uncheck the menu item
// if it is not currently checked.
MENUITEMINFO info;
info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
info.fMask = MIIM_STATE; // get the state of the menu item
VERIFY(submenu->GetMenuItemInfo(ID_MENU_TOGGLEINFO, &info));
if (info.fState & MF_CHECKED)
submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_UNCHECKED | MF_BYCOMMAND);
else
submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_CHECKED | MF_BYCOMMAND);
}
CMenu::GetMenuState
Gibt den Status des angegebenen Menüelements oder die Anzahl der Elemente in einem Popupmenü zurück.
UINT GetMenuState(
UINT nID,
UINT nFlags) const;
Parameter
nID
Gibt die Menüelement-ID an, wie durch nFlags
.
nFlags
Gibt die Art von nID
. Es kann sich um einen der folgenden Werte handeln:
MF_BYCOMMAND
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung.MF_BYPOSITION
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0.
Rückgabewert
Der Wert 0xFFFFFFFF
, wenn das angegebene Element nicht vorhanden ist. Wenn nId
ein Popupmenü identifiziert wird, enthält das Byte mit hoher Reihenfolge die Anzahl der Elemente im Popupmenü, und das Byte mit niedriger Reihenfolge enthält die Menükennzeichnungen, die dem Popupmenü zugeordnet sind. Andernfalls ist der Rückgabewert eine Maske (boolean OR) der Werte aus der folgenden Liste (diese Maske beschreibt den Status des Menüelements, das nId
identifiziert):
MF_CHECKED
Dient als Umschaltfläche,MF_UNCHECKED
um das Standardkontrollkästchen neben dem Element zu platzieren. Wenn die Anwendung Häkchenbitmaps bereitstellt (siehe MemberfunktionSetMenuItemBitmaps
), wird die Bitmap "Häkchen bei" angezeigt.MF_DISABLED
Deaktiviert das Menüelement, sodass es nicht ausgewählt, aber nicht abgeblendet wird.MF_ENABLED
Aktiviert das Menüelement, sodass es ausgewählt und aus dem abgeblendeten Zustand wiederhergestellt werden kann. Beachten Sie, dass der Wert dieser Konstante 0 ist; eine Anwendung sollte bei Verwendung dieses Werts nicht auf "0" testen, wenn dieser Wert verwendet wird.MF_GRAYED
Deaktiviert das Menüelement, sodass es nicht ausgewählt und abgeblendet werden kann.MF_MENUBARBREAK
Platziert das Element in einer neuen Zeile in statischen Menüs oder in einer neuen Spalte in Popupmenüs. Die neue Popupmenüspalte wird durch eine vertikale Trennlinie von der alten Spalte getrennt.MF_MENUBREAK
Platziert das Element in einer neuen Zeile in statischen Menüs oder in einer neuen Spalte in Popupmenüs. Es wird keine Trennlinie zwischen den Spalten platziert.MF_SEPARATOR
Zeichnet eine horizontale Trennlinie. Kann nur in einem Popupmenü verwendet werden. Diese Linie kann nicht abgeblendet, deaktiviert oder hervorgehoben werden. Andere Parameter werden ignoriert.MF_UNCHECKED
Dient als Umschaltfläche zumMF_CHECKED
Entfernen eines Häkchens neben dem Element. Wenn die Anwendung Häkchenbitmaps bereitstellt (siehe MemberfunktionSetMenuItemBitmaps
), wird die Bitmap "Häkchen deaktiviert" angezeigt. Beachten Sie, dass der Wert dieser Konstante 0 ist; eine Anwendung sollte bei Verwendung dieses Werts nicht auf "0" testen, wenn dieser Wert verwendet wird.
Beispiel
// CMainFrame::OnToggleTestMenuState() is a menu command handler for
// "Toggle State" menu item (whose resource id is ID_MENU_TOGGLESTATE).
// It toggles the checked or unchecked state of the "Toggle State" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuState()
{
// Get the popup menu which contains the "Toggle State" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
// Check the state of the "Toggle State" menu item. Check the menu item
// if it is currently unchecked. Otherwise, uncheck the menu item
// if it is not currently checked.
UINT state = submenu->GetMenuState(ID_MENU_TOGGLESTATE, MF_BYCOMMAND);
ASSERT(state != 0xFFFFFFFF);
if (state & MF_CHECKED)
submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_UNCHECKED | MF_BYCOMMAND);
else
submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_CHECKED | MF_BYCOMMAND);
}
CMenu::GetMenuString
Kopiert die Beschriftung des angegebenen Menüelements in den angegebenen Puffer.
int GetMenuString(
UINT nIDItem,
LPTSTR lpString,
int nMaxCount,
UINT nFlags) const;
int GetMenuString(
UINT nIDItem,
CString& rString,
UINT nFlags) const;
Parameter
nIDItem
Gibt den ganzzahligen Bezeichner des Menüelements oder den Offset des Menüelements im Menü an, abhängig vom Wert von nFlags
.
lpString
Verweist auf den Puffer, der die Bezeichnung empfängt.
rString
Ein Verweis auf ein CString
Objekt, das die kopierte Menüzeichenfolge empfängt.
nMaxCount
Gibt die maximale Länge (in Zeichen) der zu kopierenden Beschriftung an. Wenn die Beschriftung länger als der in der Angabe angegebene nMaxCount
Höchstwert ist, werden die zusätzlichen Zeichen abgeschnitten.
nFlags
Gibt die Interpretation des nIDItem
Parameters an. Es kann sich um einen der folgenden Werte handeln:
nFlags |
Interpretation von nIDItem |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
Rückgabewert
Gibt die tatsächliche Anzahl der zeichen an, die in den Puffer kopiert wurden, nicht einschließlich des Null-Terminators.
Hinweise
Der nMaxCount
Parameter sollte größer als die Anzahl von Zeichen in der Beschriftung sein, um das NULL-Zeichen aufzunehmen, das eine Zeichenfolge beendet.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::GetSafeHmenu
Gibt den HMENU
Umbruch dieses CMenu
Objekts oder einen NULL
CMenu
Zeiger zurück.
HMENU GetSafeHmenu() const;
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::LoadMenu
.
CMenu::GetSubMenu
Ruft das CMenu
Objekt eines Popupmenüs ab.
CMenu* GetSubMenu(int nPos) const;
Parameter
nPos
Gibt die Position des Popupmenüs an, das im Menü enthalten ist. Positionswerte beginnen bei 0 für das erste Menüelement. Der Bezeichner des Popupmenüs kann in dieser Funktion nicht verwendet werden.
Rückgabewert
Ein Zeiger auf ein CMenu
Objekt, dessen m_hMenu
Element ein Handle für das Popupmenü enthält, wenn an der angegebenen Position ein Popupmenü vorhanden ist; andernfalls NULL
. Wenn kein CMenu
Objekt vorhanden ist, wird ein temporäres Objekt erstellt. Der CMenu
zurückgegebene Zeiger sollte nicht gespeichert werden.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::TrackPopupMenu
.
CMenu::InsertMenu
Fügt an der angegebenen nPosition
Position ein neues Menüelement ein und verschiebt andere Elemente nach unten im Menü.
BOOL InsertMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL InsertMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nPosition
Gibt das Menüelement an, vor dem das neue Menüelement eingefügt werden soll. Der nFlags
Parameter kann auf folgende Weise interpretiert nPosition
werden:
nFlags |
Interpretation von nPosition |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. Wenn nPosition -1 ist, wird das neue Menüelement am Ende des Menüs angefügt. |
nFlags
Gibt an, wie nPosition
das Menü interpretiert wird, und gibt Informationen zum Status des neuen Menüelements an, wenn es dem Menü hinzugefügt wird. Eine Liste der Kennzeichen, die festgelegt werden können, finden Sie in der AppendMenu
Memberfunktion. Wenn Sie mehrere Werte angeben möchten, verwenden Sie den bitweisen OR-Operator, um sie mit dem Attribut oder MF_BYPOSITION
der MF_BYCOMMAND
Kennzeichnung zu kombinieren.
nIDNewItem
Gibt entweder die Befehls-ID des neuen Menüelements oder, falls nFlags
festgelegt, MF_POPUP
das Menühandle (HMENU
) des Popupmenüs an. Der nIDNewItem
Parameter wird ignoriert (nicht erforderlich), wenn nFlags
er auf MF_SEPARATOR
.
lpszNewItem
Gibt den Inhalt des neuen Menüelements an. nFlags
kann auf folgende Weise interpretiert lpszNewItem
werden:
nFlags |
Interpretation von lpszNewItem |
---|---|
MF_OWNERDRAW |
Enthält einen von der Anwendung bereitgestellten 32-Bit-Wert, den die Anwendung verwenden kann, um zusätzliche Daten zu verwalten, die dem Menüelement zugeordnet sind. Dieser 32-Bit-Wert steht der Anwendung im itemData Element der Struktur zur Verfügung, die von den WM_MEASUREITEM und WM_DRAWITEM den Nachrichten bereitgestellt wird. Diese Nachrichten werden gesendet, wenn das Menüelement anfangs angezeigt oder geändert wird. |
MF_STRING |
Enthält einen langen Zeiger auf eine mit Null beendete Zeichenfolge. Dies ist die Standardinterpretation. |
MF_SEPARATOR |
Der lpszNewItem Parameter wird ignoriert (nicht erforderlich). |
pBmp
Verweist auf ein CBitmap
Objekt, das als Menüelement verwendet wird.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Die Anwendung kann den Status des Menüelements durch Festlegen von Werten in nFlags
.
Wenn ein Menü, das sich in einem Fenster befindet, geändert wird (unabhängig davon, ob das Fenster angezeigt wird), sollte die Anwendung aufrufen CWnd::DrawMenuBar
.
Wenn nIDNewItem
ein Popupmenü angegeben wird, wird es Teil des Menüs, in das es eingefügt wird. Wenn dieses Menü zerstört wird, wird auch das eingefügte Menü zerstört. Ein eingefügtes Menü sollte von einem CMenu
Objekt getrennt werden, um Konflikte zu vermeiden.
Wenn das aktive untergeordnete MDI-Fenster (Multiple Document Interface) maximiert ist und eine Anwendung ein Popupmenü in das Menü der MDI-Anwendung einfügt, indem sie diese Funktion aufruft und das MF_BYPOSITION
Kennzeichen angibt, wird das Menü eine Position weiter links eingefügt als erwartet. Dies geschieht, da das Steuerelementmenü des aktiven untergeordneten MDI-Fensters an der ersten Position der Menüleiste des MDI-Rahmenfensters eingefügt wird. Um das Menü ordnungsgemäß zu positionieren, muss die Anwendung dem Positionswert 1 hinzufügen, der andernfalls verwendet werden würde. Eine Anwendung kann die WM_MDIGETACTIVE
Nachricht verwenden, um zu bestimmen, ob das derzeit aktive untergeordnete Fenster maximiert ist.
Beispiel
// CMainFrame::OnChangeFileMenu() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class.
// It modifies the File menu by inserting, removing and renaming
// some menu items. Other operations include associating a context
// help id and setting default menu item to the File menu.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnChangeFileMenu()
{
// Get the menu from the application window.
CMenu *mmenu = GetMenu();
// Look for "File" menu.
int pos = FindMenuItem(mmenu, _T("&File"));
if (pos == -1)
return;
// Remove "New" menu item from the File menu.
CMenu *submenu = mmenu->GetSubMenu(pos);
pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
if (pos > -1)
submenu->RemoveMenu(pos, MF_BYPOSITION);
// Look for "Open" menu item from the File menu. Insert a new
// menu item called "Close" right after the "Open" menu item.
// ID_CLOSEFILE is the command id for the "Close" menu item.
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
if (pos > -1)
submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));
// Rename menu item "Exit" to "Exit Application".
pos = FindMenuItem(submenu, _T("E&xit"));
if (pos > -1)
{
UINT id = submenu->GetMenuItemID(pos);
submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
}
// Associate a context help ID with File menu, if one is not found.
// ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
// that is defined in resource file.
if (submenu->GetMenuContextHelpId() == 0)
submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);
// Set "Open" menu item as the default menu item for the File menu,
// if one is not found. So, when a user double-clicks the File
// menu, the system sends a command message to the menu's owner
// window and closes the menu as if the File\Open command item had
// been chosen.
if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
{
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
submenu->SetDefaultItem(pos, TRUE);
}
}
// FindMenuItem() will find a menu item string from the specified
// popup menu and returns its position (0-based) in the specified
// popup menu. It returns -1 if no such menu item string is found.
int FindMenuItem(CMenu *Menu, LPCTSTR MenuString)
{
ASSERT(Menu);
ASSERT(::IsMenu(Menu->GetSafeHmenu()));
int count = Menu->GetMenuItemCount();
for (int i = 0; i < count; i++)
{
CString str;
if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
str.Compare(MenuString) == 0)
return i;
}
return -1;
}
CMenu::InsertMenuItem
Fügt ein neues Menüelement an der angegebenen Position in einem Menü ein.
BOOL InsertMenuItem(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Siehe Beschreibung uItem
im InsertMenuItem
Windows SDK.
lpMenuItemInfo
Siehe Beschreibung lpmii
im InsertMenuItem
Windows SDK.
fByPos
Siehe Beschreibung fByPosition
im InsertMenuItem
Windows SDK.
Hinweise
Diese Funktion umschließt InsertMenuItem
, die im Windows SDK beschrieben wird.
CMenu::LoadMenu
Lädt eine Menüressource aus der ausführbaren Datei der Anwendung und fügt sie an das CMenu
Objekt an.
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
Parameter
lpszResourceName
Verweist auf eine mit Null beendete Zeichenfolge, die den Namen der zu ladenden Menüressource enthält.
nIDResource
Gibt die Menü-ID der zu ladenden Menüressource an.
Rückgabewert
Nonzero, wenn die Menüressource erfolgreich geladen wurde; andernfalls 0.
Hinweise
Vor dem Beenden muss eine Anwendung Systemressourcen freigeben, die einem Menü zugeordnet sind, wenn das Menü keinem Fenster zugewiesen ist. Eine Anwendung gibt ein Menü frei, indem die DestroyMenu
Memberfunktion aufgerufen wird.
Beispiel
// CMainFrame::OnReplaceMenu() is a menu command handler for CMainFrame
// class, which in turn is a CFrameWnd-derived class. It loads a new
// menu resource and replaces the SDI application window's menu bar with
// this new menu. CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnReplaceMenu()
{
// Load the new menu.
m_ShortMenu.LoadMenu(IDR_SHORT_MENU);
ASSERT(m_ShortMenu);
// Remove and destroy the old menu
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);
// Add the new menu
SetMenu(&m_ShortMenu);
// Assign default menu
m_hMenuDefault = m_ShortMenu.GetSafeHmenu(); // or m_ShortMenu.m_hMenu;
}
CMenu::LoadMenuIndirect
Lädt eine Ressource aus einer Menüvorlage im Arbeitsspeicher und fügt sie an das CMenu
Objekt an.
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
Parameter
lpMenuTemplate
Verweist auf eine Menüvorlage (eine einzelne MENUITEMTEMPLATEHEADER
Struktur und eine Sammlung einer oder MENUITEMTEMPLATE
mehrerer Strukturen). Weitere Informationen zu diesen beiden Strukturen finden Sie im Windows SDK.
Rückgabewert
Nonzero, wenn die Menüressource erfolgreich geladen wurde; andernfalls 0.
Hinweise
Eine Menüvorlage ist eine Kopfzeile, gefolgt von einer Sammlung einer oder MENUITEMTEMPLATE
mehrerer Strukturen, die jeweils ein oder mehrere Menüelemente und Popupmenüs enthalten können.
Die Versionsnummer sollte 0 sein.
Die mtOption
Kennzeichnungen sollten für das letzte Element in einer Popupliste und für das letzte Element in der Hauptliste enthalten MF_END
sein. Weitere Flags finden Sie in der AppendMenu
Memberfunktion. Das mtId
Element muss bei Angabe in mtOption
der MENUITEMTEMPLATE
Struktur MF_POPUP
ausgelassen werden.
Der für die MENUITEMTEMPLATE
Struktur zugewiesene Platz muss groß genug mtString
sein, damit der Name des Menüelements als null-beendete Zeichenfolge enthalten ist.
Vor dem Beenden muss eine Anwendung Systemressourcen freigeben, die einem Menü zugeordnet sind, wenn das Menü keinem Fenster zugewiesen ist. Eine Anwendung gibt ein Menü frei, indem die DestroyMenu
Memberfunktion aufgerufen wird.
Beispiel
// CMainFrame::OnLoadMenuIndirect() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class. It
// shows how to use LoadMenuIndirect() to load a resource from a
// menu template in memory.
void CMainFrame::OnLoadMenuIndirect()
{
// For simplicity, allocate 500 bytes from stack. May use
// GlobalAlloc() to allocate memory bytes from heap.
BYTE milist[500];
memset(milist, 0, 500);
int bytes_left = sizeof(milist);
// Fill up the MENUITEMTEMPLATEHEADER structure.
MENUITEMTEMPLATEHEADER *mheader = (MENUITEMTEMPLATEHEADER*)milist;
mheader->versionNumber = 0;
mheader->offset = 0;
int bytes_used = sizeof(MENUITEMTEMPLATEHEADER);
bytes_left -= bytes_used;
// Add the following menu items to menu bar:
// File Edit
// Exit Copy
// Paste
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&File", 0,
TRUE, FALSE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"E&xit",
ID_APP_EXIT, FALSE, TRUE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Edit", 0,
TRUE, TRUE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Copy",
ID_EDIT_COPY, FALSE, FALSE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Paste",
ID_EDIT_PASTE, FALSE, TRUE);
bytes_left -= bytes_used;
// Load resource from a menu template in memory.
ASSERT(m_IndiMenu.LoadMenuIndirect(milist));
// Remove and destroy old menu
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);
// Add new menu.
SetMenu(&m_IndiMenu);
// Assign default menu
m_hMenuDefault = m_IndiMenu.m_hMenu;
}
// This is a helper function for adding a menu item (either a popup
// or command item) to the specified menu template.
//
// MenuTemplate - pointer to a menu template
// TemplateBytes - space remaining in MenuTemplate
// MenuString - string for the menu item to be added
// MenuID - id for the command item. Its value is ignored if
// IsPopup is TRUE.
// IsPopup - TRUE for popup menu (or submenu); FALSE for command
// item
// LastItem - TRUE if MenuString is the last item for the popup;
// FALSE otherwise.
UINT AddMenuItem(LPVOID MenuTemplate, int TemplateBytes, WCHAR *MenuString,
WORD MenuID, BOOL IsPopup, BOOL LastItem)
{
MENUITEMTEMPLATE *mitem = (MENUITEMTEMPLATE*)MenuTemplate;
UINT bytes_used = 0;
if (IsPopup) // for popup menu
{
if (LastItem)
mitem->mtOption = MF_POPUP | MF_END;
else
mitem->mtOption = MF_POPUP;
bytes_used += sizeof(mitem->mtOption);
mitem = (MENUITEMTEMPLATE*)((BYTE*)MenuTemplate + bytes_used);
// a popup doesn't have mtID!!!
TemplateBytes -= bytes_used;
wcscpy_s((WCHAR*)mitem, TemplateBytes / sizeof(WCHAR), MenuString);
bytes_used += (UINT)(sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
}
else // for command item
{
mitem->mtOption = LastItem ? MF_END : 0;
mitem->mtID = MenuID;
TemplateBytes -= bytes_used;
wcscpy_s(mitem->mtString, TemplateBytes / sizeof(WCHAR), MenuString);
bytes_used += (UINT)(sizeof(mitem->mtOption) + sizeof(mitem->mtID) +
sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
}
return bytes_used;
}
CMenu::m_hMenu
Gibt das HMENU
Handle des dem Objekt zugeordneten Windows-Menüs CMenu
an.
HMENU m_hMenu;
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::LoadMenu
.
CMenu::MeasureItem
Wird vom Framework aufgerufen, wenn ein Menü mit dem Stil "Besitzer zeichnen" erstellt wird.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameter
lpMeasureItemStruct
Ein Zeiger auf eine MEASUREITEMSTRUCT
Struktur.
Hinweise
Standardmäßig führt diese Memberfunktion nichts aus. Überschreiben Sie diese Memberfunktion, und füllen Sie die MEASUREITEMSTRUCT
Struktur aus, um Windows über die Abmessungen des Menüs zu informieren.
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnMeasureItem
for a description of the MEASUREITEMSTRUCT
structure.
Beispiel
Der folgende Code stammt aus dem MFC-Beispiel CTRLTEST
:
// Override MeasureItem() to return the size of the menu item.
// CColorMenu is a CMenu-derived class.
#define COLOR_BOX_WIDTH 20
#define COLOR_BOX_HEIGHT 20
void CColorMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
// all items are of fixed size
lpMIS->itemWidth = COLOR_BOX_WIDTH;
lpMIS->itemHeight = COLOR_BOX_HEIGHT;
}
CMenu::ModifyMenu
Ändert ein vorhandenes Menüelement an der durch nPosition
.
BOOL ModifyMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL ModifyMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nPosition
Gibt das zu ändernde Menüelement an. Der nFlags
Parameter kann auf folgende Weise interpretiert nPosition
werden:
nFlags |
Interpretation von nPosition |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
nFlags
Gibt an, wie nPosition
die Interpretation erfolgt, und gibt Informationen zu den Änderungen an dem Menüelement. Eine Liste der Flags, die festgelegt werden können, finden Sie in der AppendMenu
Memberfunktion.
nIDNewItem
Gibt entweder die Befehls-ID des geänderten Menüelements oder, falls nFlags
festgelegt, MF_POPUP
das Menühandle (HMENU
) eines Popupmenüs an. Der nIDNewItem
Parameter wird ignoriert (nicht erforderlich), wenn nFlags
er auf MF_SEPARATOR
.
lpszNewItem
Gibt den Inhalt des neuen Menüelements an. Der nFlags
Parameter kann auf folgende Weise interpretiert lpszNewItem
werden:
nFlags |
Interpretation von lpszNewItem |
---|---|
MF_OWNERDRAW |
Enthält einen von der Anwendung bereitgestellten 32-Bit-Wert, den die Anwendung verwenden kann, um zusätzliche Daten zu verwalten, die dem Menüelement zugeordnet sind. Dieser 32-Bit-Wert ist für die Anwendung verfügbar, wenn sie verarbeitet MF_MEASUREITEM und MF_DRAWITEM . |
MF_STRING |
Enthält einen langen Zeiger auf eine mit Null beendete Zeichenfolge oder auf eine CString . |
MF_SEPARATOR |
Der lpszNewItem Parameter wird ignoriert (nicht erforderlich). |
pBmp
Verweist auf ein CBitmap
Objekt, das als Menüelement verwendet wird.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Die Anwendung gibt den neuen Zustand des Menüelements durch Festlegen von Werten in nFlags
. Wenn diese Funktion ein Popupmenü ersetzt, das dem Menüelement zugeordnet ist, wird das alte Popupmenü zerstört und der vom Popupmenü verwendete Speicher freigegeben.
Wenn nIDNewItem
ein Popupmenü angegeben wird, wird es Teil des Menüs, in das es eingefügt wird. Wenn dieses Menü zerstört wird, wird auch das eingefügte Menü zerstört. Ein eingefügtes Menü sollte von einem CMenu
Objekt getrennt werden, um Konflikte zu vermeiden.
Wenn ein Menü, das sich in einem Fenster befindet, geändert wird (unabhängig davon, ob das Fenster angezeigt wird), sollte die Anwendung aufrufen CWnd::DrawMenuBar
. Um die Attribute vorhandener Menüelemente zu ändern, ist es wesentlich schneller, die CheckMenuItem
Funktionen und EnableMenuItem
Memberfunktionen zu verwenden.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::operator HMENU
Verwenden Sie diesen Operator, um das Handle des CMenu
Objekts abzurufen.
operator HMENU() const;
Rückgabewert
Bei erfolgreicher Ausführung des Objekts; CMenu
andernfalls NULL
.
Hinweise
Sie können das Handle verwenden, um Windows-APIs direkt aufzurufen.
CMenu::operator !=
Bestimmt, ob zwei Menüs logisch nicht gleich sind.
BOOL operator!=(const CMenu& menu) const;
Parameter
menu
Ein CMenu
-Objekt für den Vergleich.
Hinweise
Überprüft, ob ein Menüobjekt auf der linken Seite nicht mit einem Menüobjekt auf der rechten Seite identisch ist.
CMenu::operator ==
Bestimmt, ob zwei Menüs logisch gleich sind.
BOOL operator==(const CMenu& menu) const;
Parameter
menu
Ein CMenu
-Objekt für den Vergleich.
Hinweise
Testet, ob ein Menüobjekt auf der linken Seite gleich (im Sinne des HMENU
Werts) einem Menüobjekt auf der rechten Seite ist.
CMenu::RemoveMenu
Löscht ein Menüelement mit einem zugeordneten Popupmenü aus dem Menü.
BOOL RemoveMenu(
UINT nPosition,
UINT nFlags);
Parameter
nPosition
Gibt das zu entfernende Menüelement an. Der nFlags
Parameter kann auf folgende Weise interpretiert nPosition
werden:
nFlags |
Interpretation von nPosition |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
nFlags
Gibt an, wie nPosition
interpretiert wird.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Es zerstört nicht den Handle für ein Popupmenü, sodass das Menü wiederverwendet werden kann. Vor dem Aufrufen dieser Funktion kann die Anwendung die GetSubMenu
Memberfunktion aufrufen, um das Popupobjekt CMenu
zur Wiederverwendung abzurufen.
Wenn ein Menü, das sich in einem Fenster befindet, geändert wird (unabhängig davon, ob das Fenster angezeigt wird), muss die Anwendung aufrufen CWnd::DrawMenuBar
.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::SetDefaultItem
Legt das Standardmenüelement für das angegebene Menü fest.
BOOL SetDefaultItem(
UINT uItem,
BOOL fByPos = FALSE);
Parameter
uItem
Bezeichner oder Position des neuen Standardmenüelements oder - 1 für kein Standardelement. Die Bedeutung dieses Parameters hängt vom Wert von fByPos
.
fByPos
Wert, der die Bedeutung von uItem
. Wenn dieser Parameter lautet FALSE
, uItem
handelt es sich um einen Menüelementbezeichner. Andernfalls handelt es sich um eine Menüelementposition.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null. Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, verwenden Sie die Win32-Funktion GetLastError
, wie im Windows SDK beschrieben.
Hinweise
Diese Memberfunktion implementiert das Verhalten der Win32-Funktion SetMenuDefaultItem
, wie im Windows SDK beschrieben.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::SetMenuContextHelpId
Ordnet eine Kontexthilfe-ID zu CMenu
.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parameter
dwContextHelpId
Kontexthilfe-ID, die zugeordnet CMenu
werden soll.
Rückgabewert
Nonzero bei erfolgreicher Ausführung; andernfalls 0
Hinweise
Alle Elemente im Menü geben diesen Bezeichner frei – es ist nicht möglich, einen Hilfekontextbezeichner an die einzelnen Menüelemente anzufügen.
Beispiel
Ein Beispiel hierfür finden Sie unter CMenu::InsertMenu
.
CMenu::SetMenuInfo
Legt Informationen für ein Menü fest.
BOOL SetMenuInfo(LPCMENUINFO lpcmi);
Parameter
lpcmi
Ein Zeiger auf eine MENUINFO
Struktur, die Informationen für das Menü enthält.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null; andernfalls ist der Rückgabewert null.
Hinweise
Rufen Sie diese Funktion auf, um bestimmte Informationen zum Menü festzulegen.
CMenu::SetMenuItemBitmaps
Ordnet die angegebenen Bitmaps einem Menüelement zu.
BOOL SetMenuItemBitmaps(
UINT nPosition,
UINT nFlags,
const CBitmap* pBmpUnchecked,
const CBitmap* pBmpChecked);
Parameter
nPosition
Gibt das zu ändernde Menüelement an. Der nFlags
Parameter kann auf folgende Weise interpretiert nPosition
werden:
nFlags |
Interpretation von nPosition |
---|---|
MF_BYCOMMAND |
Gibt an, dass der Parameter die Befehls-ID des vorhandenen Menüelements angibt. Dies ist die Standardeinstellung, wenn weder MF_BYCOMMAND MF_BYPOSITION noch festgelegt wird. |
MF_BYPOSITION |
Gibt an, dass der Parameter die Position des vorhandenen Menüelements angibt. Das erste Element befindet sich an Position 0. |
nFlags
Gibt an, wie nPosition
interpretiert wird.
pBmpUnchecked
Gibt die Bitmap an, die für nicht aktivierte Menüelemente verwendet werden soll.
pBmpChecked
Gibt die Bitmap an, die für aktivierte Menüelemente verwendet werden soll.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
Unabhängig davon, ob das Menüelement aktiviert oder deaktiviert ist, zeigt Windows die entsprechende Bitmap neben dem Menüelement an.
Wenn eine pBmpUnchecked
oder pBmpChecked
mehrere Elemente vorhanden sind NULL
, zeigt Windows nichts neben dem Menüelement für das entsprechende Attribut an. Wenn beide Parameter sind NULL
, verwendet Windows das Standard-Häkchen, wenn das Element aktiviert ist, und entfernt das Häkchen, wenn das Element deaktiviert ist.
Wenn das Menü zerstört wird, werden diese Bitmaps nicht zerstört; die Anwendung muss sie zerstören.
Die Windows-Funktion GetMenuCheckMarkDimensions
ruft die Abmessungen des Standard-Häkchens ab, das für Menüelemente verwendet wird. Die Anwendung verwendet diese Werte, um die geeignete Größe für die mit dieser Funktion bereitgestellten Bitmaps zu bestimmen. Rufen Sie die Größe ab, erstellen Sie Ihre Bitmaps, und legen Sie sie fest.
Beispiel
// The code fragment below is from CMainFrame::OnCreate and shows
// how to associate bitmaps with the "Bitmap" menu item.
// Whether the "Bitmap" menu item is checked or unchecked, Windows
// displays the appropriate bitmap next to the menu item. Both
// IDB_CHECKBITMAP and IDB_UNCHECKBITMAP bitmaps are loaded
// in OnCreate() and destroyed in the destructor of CMainFrame class.
// CMainFrame is a CFrameWnd-derived class.
// Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP));
// Associate bitmaps with the "Bitmap" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
ASSERT(submenu->SetMenuItemBitmaps(ID_MENU_BITMAP, MF_BYCOMMAND,
&m_CheckBitmap, &m_UnCheckBitmap));
// This code fragment is taken from CMainFrame::~CMainFrame
// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
m_CheckBitmap.DeleteObject();
if (m_UnCheckBitmap.m_hObject)
m_UnCheckBitmap.DeleteObject();
CMenu::SetMenuItemInfo
Ändert Informationen zu einem Menüelement.
BOOL SetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Siehe Beschreibung uItem
im SetMenuItemInfo
Windows SDK.
lpMenuItemInfo
Siehe Beschreibung lpmii
im SetMenuItemInfo
Windows SDK.
fByPos
Siehe Beschreibung fByPosition
im SetMenuItemInfo
Windows SDK.
Hinweise
Diese Funktion umschließt SetMenuItemInfo
, die im Windows SDK beschrieben wird.
CMenu::TrackPopupMenu
Zeigt ein unverankertes Popupmenü an der angegebenen Position an und verfolgt die Auswahl von Elementen im Popupmenü.
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0);
Parameter
nFlags
Gibt Kennzeichnungen für Bildschirmposition und Mausposition an. Eine Liste der verfügbaren Flags finden Sie unter.See TrackPopupMenu
for a list of available flags.
x
Gibt die horizontale Position in Bildschirmkoordinaten des Popupmenüs an. Abhängig vom Wert des nFlags
Parameters kann das Menü linksbündig, rechtsbündig oder relativ zu dieser Position zentriert werden.
y
Gibt die vertikale Position in Bildschirmkoordinaten des oberen Menüs auf dem Bildschirm an.
pWnd
Identifiziert das Fenster, das das Popupmenü besitzt. Dieser Parameter kann nicht angegeben werden NULL
, auch wenn das TPM_NONOTIFY
Flag angegeben ist. Dieses Fenster empfängt alle WM_COMMAND
Nachrichten aus dem Menü. In Windows-Versionen 3.1 und höher empfängt WM_COMMAND
das Fenster keine Nachrichten, bis sie zurückgegeben werden TrackPopupMenu
. In Windows 3.0 empfängt WM_COMMAND
das Fenster Nachrichten, bevor TrackPopupMenu
sie zurückgegeben werden.
lpRect
Ignoriert.
Rückgabewert
Diese Methode gibt das Ergebnis des Aufrufs TrackPopupMenu
im Windows SDK zurück.
Hinweise
Ein unverankerte Popupmenü kann an einer beliebigen Stelle auf dem Bildschirm angezeigt werden.
Beispiel
// The code fragment shows how to get the File menu from the
// application window and displays it as a floating popup menu
// when the right mouse button is clicked in view.
// CMdiView is a CView-derived class.
void CMdiView::OnRButtonDown(UINT nFlags, CPoint point)
{
CView::OnRButtonDown(nFlags, point);
CMenu *menu_bar = AfxGetMainWnd()->GetMenu();
CMenu *file_menu = menu_bar->GetSubMenu(0);
ASSERT(file_menu);
ClientToScreen(&point);
file_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,
point.y, this);
}
CMenu::TrackPopupMenuEx
Zeigt ein unverankertes Popupmenü an der angegebenen Position an und verfolgt die Auswahl von Elementen im Popupmenü.
BOOL TrackPopupMenuEx(
UINT fuFlags,
int x,
int y,
CWnd* pWnd,
LPTPMPARAMS lptpm);
Parameter
fuFlags
Gibt verschiedene Funktionen für das erweiterte Menü an. Eine Auflistung aller Werte und deren Bedeutung finden Sie unter TrackPopupMenuEx
.
x
Gibt die horizontale Position in Bildschirmkoordinaten des Popupmenüs an.
y
Gibt die vertikale Position in Bildschirmkoordinaten des oberen Menüs auf dem Bildschirm an.
pWnd
Ein Zeiger auf das Fenster, das das Popupmenü besitzt und die Nachrichten aus dem erstellten Menü empfängt. Dieses Fenster kann ein beliebiges Fenster aus der aktuellen Anwendung sein, darf aber nicht sein NULL
. Wenn Sie im Parameter angebenTPM_NONOTIFY
, sendet die Funktion keine Nachrichten an pWnd
.fuFlags
Die Funktion muss für das Fenster zurückgegeben werden, auf das verwiesen wird, indem pWnd
die WM_COMMAND
Nachricht empfangen wird.
lptpm
Zeigen Sie auf eine TPMPARAMS
Struktur, die einen Bereich des Bildschirms angibt, den das Menü nicht überlappen soll. Dieser Parameter kann NULL
sein.
Rückgabewert
Wenn Sie im fuFlags
Parameter angebenTPM_RETURNCMD
, ist der Rückgabewert der Menüelementbezeichner des Elements, das der Benutzer ausgewählt hat. Wenn der Benutzer das Menü abbricht, ohne eine Auswahl vorzunehmen, oder wenn ein Fehler auftritt, lautet der Rückgabewert 0.
Wenn Sie den fuFlags
Parameter nicht angebenTPM_RETURNCMD
, ist der Rückgabewert ungleich Null, wenn die Funktion erfolgreich ist, und 0, wenn sie fehlschlägt. Um erweiterte Fehlerinformationen abzurufen, rufen Sie GetLastError
auf.
Hinweise
Ein unverankerte Popupmenü kann an einer beliebigen Stelle auf dem Bildschirm angezeigt werden. Weitere Informationen zum Behandeln von Fehlern beim Erstellen des Popupmenüs finden Sie unter TrackPopupMenuEx
.
Siehe auch
MFC-Beispiel CTRLTEST
MFC-Beispiel DYNAMENU
CObject
Klasse
Hierarchiediagramm