Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Een inkapseling van de Windows HMENU.
Syntaxis
class CMenu : public CObject
Leden
Openbare constructors
| Naam | Description |
|---|---|
CMenu::CMenu |
Maakt een CMenu object. |
Openbare methoden
| Naam | Description |
|---|---|
CMenu::AppendMenu |
Voegt een nieuw item toe aan het einde van dit menu. |
CMenu::Attach |
Hiermee wordt een Windows-menugreep gekoppeld aan een CMenu object. |
CMenu::CheckMenuItem |
Hiermee plaatst u een vinkje naast of verwijdert u een vinkje uit een menu-item in het snelmenu. |
CMenu::CheckMenuRadioItem |
Hiermee plaatst u een keuzerondje naast een menu-item en verwijdert u het keuzerondje uit alle andere menu-items in de groep. |
CMenu::CreateMenu |
Hiermee maakt u een leeg menu en koppelt u het aan een CMenu object. |
CMenu::CreatePopupMenu |
Hiermee maakt u een leeg snelmenu en koppelt u het aan een CMenu object. |
CMenu::DeleteMenu |
Hiermee verwijdert u een opgegeven item uit het menu. Als het menu-item een gekoppeld pop-upmenu heeft, vernietigt u de greep naar het pop-upmenu en maakt u het geheugen vrij dat door het menu wordt gebruikt. |
CMenu::DeleteTempMap |
Hiermee verwijdert u tijdelijke CMenu objecten die zijn gemaakt door de FromHandle lidfunctie. |
CMenu::DestroyMenu |
Vernietigt het menu dat is gekoppeld aan een CMenu object en maakt elk geheugen vrij dat het menu bezet. |
CMenu::Detach |
Een Windows-menugreep loskoppelen van een CMenu object en retourneert de ingang. |
CMenu::DrawItem |
Aangeroepen door het framework wanneer een visueel aspect van een door de eigenaar getekend menu verandert. |
CMenu::EnableMenuItem |
Hiermee schakelt u een menu-item in, schakelt u deze uit of dimt (grijs). |
CMenu::FromHandle |
Retourneert een aanwijzer naar een CMenu object met een Windows-menugreep. |
CMenu::GetDefaultItem |
Hiermee bepaalt u de standaardmenuopdracht in het opgegeven menu. |
CMenu::GetMenuContextHelpId |
Hiermee haalt u de Help-context-id op die aan het menu is gekoppeld. |
CMenu::GetMenuInfo |
Haalt informatie op in een specifiek menu. |
CMenu::GetMenuItemCount |
Bepaalt het aantal items in een snelmenu of menu op het hoogste niveau. |
CMenu::GetMenuItemID |
Hiermee haalt u de menu-item-id op voor een menu-item op de opgegeven positie. |
CMenu::GetMenuItemInfo |
Hiermee haalt u informatie over een menu-item op. |
CMenu::GetMenuState |
Retourneert de status van het opgegeven menu-item of het aantal items in een snelmenu. |
CMenu::GetMenuString |
Hiermee wordt het label van het opgegeven menu-item opgehaald. |
CMenu::GetSafeHmenu |
Retourneert het m_hMenu verpakte object CMenu . |
CMenu::GetSubMenu |
Hiermee wordt een aanwijzer naar een snelmenu opgehaald. |
CMenu::InsertMenu |
Hiermee voegt u een nieuw menu-item in op de opgegeven positie en verplaatst u andere items omlaag in het menu. |
CMenu::InsertMenuItem |
Hiermee voegt u een nieuw menu-item in op de opgegeven positie in een menu. |
CMenu::LoadMenu |
Laadt een menuresource uit het uitvoerbare bestand en koppelt deze aan een CMenu object. |
CMenu::LoadMenuIndirect |
Laadt een menu van een menusjabloon in het geheugen en koppelt het aan een CMenu object. |
CMenu::MeasureItem |
Aangeroepen door het framework om menudimensies te bepalen wanneer een door de eigenaar getekend menu wordt gemaakt. |
CMenu::ModifyMenu |
Hiermee wijzigt u een bestaand menu-item op de opgegeven positie. |
CMenu::RemoveMenu |
Hiermee verwijdert u een menu-item met een gekoppeld snelmenu in het opgegeven menu. |
CMenu::SetDefaultItem |
Hiermee stelt u de standaardmenuopdracht voor het opgegeven menu in. |
CMenu::SetMenuContextHelpId |
Hiermee stelt u de help-context-id in die aan het menu moet worden gekoppeld. |
CMenu::SetMenuInfo |
Hiermee stelt u informatie in een specifiek menu in. |
CMenu::SetMenuItemBitmaps |
Koppelt de opgegeven vinkjes bitmaps aan een menu-item. |
CMenu::SetMenuItemInfo |
Hiermee wijzigt u informatie over een menu-item. |
CMenu::TrackPopupMenu |
Geeft een zwevend snelmenu weer op de opgegeven locatie en houdt de selectie van items in het snelmenu bij. |
CMenu::TrackPopupMenuEx |
Geeft een zwevend snelmenu weer op de opgegeven locatie en houdt de selectie van items in het snelmenu bij. |
Openbare operators
| Naam | Description |
|---|---|
CMenu::operator HMENU |
Hiermee wordt de greep van het menuobject opgehaald. |
CMenu::operator != |
Bepaalt of twee menuobjecten niet gelijk zijn. |
CMenu::operator == |
Bepaalt of twee menuobjecten gelijk zijn. |
Leden van openbare gegevens
| Naam | Description |
|---|---|
CMenu::m_hMenu |
Hiermee geeft u de ingang aan het Windows-menu dat aan het CMenu object is gekoppeld. |
Opmerkingen
Het biedt lidfuncties voor het maken, bijhouden, bijwerken en vernietigen van een menu.
Maak een CMenu object in het stackframe als lokaal en roep CMenuvervolgens de lidfuncties aan om het nieuwe menu naar behoefte te bewerken. Vervolgens roept u CWnd::SetMenu aan om het menu in te stellen op een venster, gevolgd door een aanroep naar de lidfunctie van Detach het CMenu object. De CWnd::SetMenu lidfunctie stelt het menu van het venster in op het nieuwe menu, zorgt ervoor dat het venster opnieuw wordt getekend om de menuwijziging weer te geven en geeft ook het eigendom van het menu door aan het venster. De aanroep om het HMENUCMenu object los te Detach maken, zodat wanneer de lokale CMenu variabele buiten het bereik valt, de CMenu objectverstructor niet probeert een menu te vernietigen dat niet langer eigenaar is. Het menu zelf wordt automatisch vernietigd wanneer het raam wordt vernietigd.
U kunt de LoadMenuIndirect lidfunctie gebruiken om een menu te maken op basis van een sjabloon in het geheugen, maar een menu dat is gemaakt op basis van een resource door middel van een aanroep LoadMenu , kan eenvoudiger worden onderhouden en de menuresource zelf kan worden gemaakt en gewijzigd door de menu-editor.
Overnamehiërarchie
CMenu
Requirements
Rubriek:afxwin.h
CMenu::AppendMenu
Voegt een nieuw item toe aan het einde van een menu.
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameterwaarden
nFlags
Hiermee geeft u informatie op over de status van het nieuwe menu-item wanneer deze wordt toegevoegd aan het menu. Het bestaat uit een of meer van de waarden die worden vermeld in de sectie Opmerkingen.
nIDNewItem
Hiermee geeft u de opdracht-id van het nieuwe menu-item of, indien nFlags ingesteld MF_POPUP, de menugreep (HMENU) van een snelmenu. De nIDNewItem parameter wordt genegeerd (niet nodig) als nFlags deze is ingesteld op MF_SEPARATOR.
lpszNewItem
Hiermee geeft u de inhoud van de nieuwe menuopdracht. De nFlags parameter wordt gebruikt om op de volgende manier te interpreteren lpszNewItem :
nFlags |
Interpretatie van lpszNewItem |
|---|---|
MF_OWNERDRAW |
Bevat een 32-bits opgegeven 32-bits waarde die de toepassing kan gebruiken voor het onderhouden van extra gegevens die zijn gekoppeld aan het menu-item. Deze 32-bits waarde is beschikbaar voor de toepassing wanneer deze wordt verwerkt WM_MEASUREITEM en WM_DRAWITEM berichten verzendt. De waarde wordt opgeslagen in het itemData lid van de structuur die bij deze berichten wordt geleverd. |
MF_STRING |
Bevat een aanwijzer naar een tekenreeks die door null is beëindigd. Dit is de standaardinterpretatie. |
MF_SEPARATOR |
De lpszNewItem parameter wordt genegeerd (niet nodig). |
pBmp
Verwijst naar een CBitmap object dat wordt gebruikt als menu-item.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
De toepassing kan de status van het menu-item opgeven door waarden in te stellen in nFlags. Wanneer nIDNewItem een pop-upmenu wordt opgegeven, wordt het onderdeel van het menu waaraan het wordt toegevoegd. Als dat menu wordt vernietigd, wordt het toegevoegde menu ook vernietigd. Een toegevoegd menu moet worden losgekoppeld van een CMenu object om conflicten te voorkomen. Houd er rekening mee dat MF_STRING en MF_OWNERDRAW niet geldig zijn voor de bitmapversie van AppendMenu.
In de volgende lijst worden de vlaggen beschreven die kunnen worden ingesteld in nFlags:
MF_CHECKEDFungeert als wisselknop omMF_UNCHECKEDhet standaard vinkje naast het item te plaatsen. Wanneer de toepassing een vinkje bitmaps levert (zie deSetMenuItemBitmapslidfunctie), wordt de bitmap 'vinkje op' weergegeven.MF_UNCHECKEDFungeert als wisselknop omMF_CHECKEDeen vinkje naast het item te verwijderen. Wanneer de toepassing een vinkje bitmaps levert (zie deSetMenuItemBitmapslidfunctie), wordt de bitmap 'vinkje uit' weergegeven.MF_DISABLEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd, maar niet wordt gedimd.MF_ENABLEDHiermee schakelt u het menu-item in, zodat deze kan worden geselecteerd en hersteld vanuit de grijsstatus.MF_GRAYEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd en gedimd.MF_MENUBARBREAKHiermee plaatst u het item op een nieuwe regel in statische menu's of in een nieuwe kolom in pop-upmenu's. De nieuwe pop-upmenukolom wordt gescheiden van de oude kolom door een verticale scheidingslijn.MF_MENUBREAKHiermee plaatst u het item op een nieuwe regel in statische menu's of in een nieuwe kolom in pop-upmenu's. Er wordt geen scheidingslijn tussen de kolommen geplaatst.MF_OWNERDRAWHiermee geeft u op dat het item een eigenaar-tekenitem is. Wanneer het menu voor het eerst wordt weergegeven, ontvangt het venster dat eigenaar is van het menu eenWM_MEASUREITEMbericht, waarmee de hoogte en breedte van het menu-item worden opgehaald. HetWM_DRAWITEMbericht is het bericht dat wordt verzonden wanneer de eigenaar het uiterlijk van de visual van het menu-item moet bijwerken. Deze optie is niet geldig voor een menu-item op het hoogste niveau.MF_POPUPHiermee geeft u op dat aan het menu-item een snelmenu is gekoppeld. De id-parameter geeft een ingang op voor een snelmenu dat aan het item moet worden gekoppeld. Dit wordt gebruikt voor het toevoegen van een snelmenu op het hoogste niveau of een hiërarchisch snelmenu aan een snelmenu-item.MF_SEPARATORHiermee tekent u een horizontale scheidingslijn. Kan alleen worden gebruikt in een snelmenu. Deze regel kan niet grijs worden weergegeven, uitgeschakeld of gemarkeerd. Andere parameters worden genegeerd.MF_STRINGHiermee geeft u op dat het menu-item een tekenreeks is.
Elk van de volgende groepen bevat vlaggen die elkaar wederzijds uitsluiten en die niet samen kunnen worden gebruikt:
MF_DISABLED,MF_ENABLEDenMF_GRAYEDMF_STRING, ,MF_OWNERDRAWMF_SEPARATORen de bitmapversieMF_MENUBARBREAKenMF_MENUBREAKMF_CHECKEDenMF_UNCHECKED
Wanneer een menu dat zich in een venster bevindt, wordt gewijzigd (ongeacht of het venster wordt weergegeven), moet de toepassing worden aangeroepen CWnd::DrawMenuBar.
Example
Zie het voorbeeld voor CMenu::CreateMenu.
CMenu::Attach
Een bestaand Windows-menu koppelen aan een CMenu object.
BOOL Attach(HMENU hMenu);
Parameterwaarden
hMenu
Hiermee geeft u een ingang naar een Windows-menu.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
Deze functie mag niet worden aangeroepen als er al een menu aan het CMenu object is gekoppeld. De menugreep wordt opgeslagen in het m_hMenu gegevenslid.
Als het menu dat u wilt bewerken al aan een venster is gekoppeld, kunt u de CWnd::GetMenu functie gebruiken om een ingang voor het menu op te halen.
Example
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
Hiermee voegt u vinkjes toe aan of verwijdert u vinkjes uit menu-items in het snelmenu.
UINT CheckMenuItem(
UINT nIDCheckItem,
UINT nCheck);
Parameterwaarden
nIDCheckItem
Hiermee geeft u het menu-item dat moet worden gecontroleerd, zoals bepaald door nCheck.
nCheck
Hiermee geeft u op hoe u het menu-item controleert en hoe u de positie van het item in het menu kunt bepalen. De nCheck parameter kan een combinatie zijn van MF_CHECKED of MF_UNCHECKED met MF_BYPOSITION vlaggen MF_BYCOMMAND . Deze vlaggen kunnen worden gecombineerd met behulp van de bitsgewijze OR-operator. Ze hebben de volgende betekenissen:
MF_BYCOMMANDHiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardwaarde.MF_BYPOSITIONHiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0.MF_CHECKEDFungeert als wisselknop omMF_UNCHECKEDhet standaard vinkje naast het item te plaatsen.MF_UNCHECKEDFungeert als wisselknop omMF_CHECKEDeen vinkje naast het item te verwijderen.
Retourwaarde
De vorige status van het item: MF_CHECKED of MF_UNCHECKED, of 0xFFFFFFFF als het menu-item niet bestond.
Opmerkingen
Met de nIDCheckItem parameter geeft u het item op dat moet worden gewijzigd.
De nIDCheckItem parameter kan een snelmenu-item en een menu-item identificeren. Er zijn geen speciale stappen vereist om een pop-upmenu-item te controleren. Menu-items op het hoogste niveau kunnen niet worden gecontroleerd. Een pop-upmenu-item moet worden gecontroleerd op positie, omdat er geen menu-item-id aan is gekoppeld.
Example
Zie het voorbeeld voor CMenu::GetMenuState.
CMenu::CheckMenuRadioItem
Hiermee wordt een opgegeven menu-item gecontroleerd en wordt het een radio-item.
BOOL CheckMenuRadioItem(
UINT nIDFirst,
UINT nIDLast,
UINT nIDItem,
UINT nFlags);
Parameterwaarden
nIDFirst
Hiermee geeft u (als id of offset, afhankelijk van de waarde van nFlags) het eerste menu-item in de groep keuzerondje.
nIDLast
Hiermee geeft u (als id of offset, afhankelijk van de waarde van nFlags) het laatste menu-item in de groep keuzerondje.
nIDItem
Hiermee geeft u (als een id of offset, afhankelijk van de waarde van nFlags) het item in de groep dat wordt gecontroleerd met een keuzerondje.
nFlags
Hiermee geeft u interpretatie van nIDFirst, nIDLasten nIDItem op de volgende manier:
| nFlags | Interpretatie |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
Retourwaarde
Niet-nul indien geslaagd; anders 0
Opmerkingen
Tegelijkertijd schakelt de functie alle andere menu-items in de gekoppelde groep uit en wordt de vlag voor het radio-itemtype voor deze items gewist. Het ingeschakelde item wordt weergegeven met een keuzerondje (of opsommingsteken) bitmap in plaats van een vinkje bitmap.
Example
Zie het voorbeeld voor ON_COMMAND_RANGE.
CMenu::CMenu
Hiermee maakt u een leeg menu en koppelt u het aan een CMenu object.
CMenu();
Opmerkingen
Het menu wordt pas gemaakt als u een van de functies voor het maken of laden van leden aanroept van CMenu:
CMenu::CreateMenu
Hiermee maakt u een menu en koppelt u het aan het CMenu object.
BOOL CreateMenu();
Retourwaarde
Niet-nul als het menu is gemaakt; anders 0.
Opmerkingen
Het menu is in eerste instantie leeg. Menu-items kunnen worden toegevoegd met behulp van de AppendMenu functie of InsertMenu lid.
Als het menu is toegewezen aan een venster, wordt het automatisch vernietigd wanneer het venster wordt vernietigd.
Voordat u afsluit, moet een toepassing systeembronnen vrijmaken die zijn gekoppeld aan een menu als het menu niet is toegewezen aan een venster. Een toepassing opent een menu door de DestroyMenu lidfunctie aan te roepen.
Example
// 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
Hiermee maakt u een snelmenu en koppelt u het aan het CMenu object.
BOOL CreatePopupMenu();
Retourwaarde
Niet-nul als het snelmenu is gemaakt; anders 0.
Opmerkingen
Het menu is in eerste instantie leeg. Menu-items kunnen worden toegevoegd met behulp van de AppendMenu functie of InsertMenu lid. De toepassing kan het snelmenu toevoegen aan een bestaand menu of pop-upmenu. De TrackPopupMenu lidfunctie kan worden gebruikt om dit menu weer te geven als een zwevend snelmenu en om selecties bij te houden in het snelmenu.
Als het menu is toegewezen aan een venster, wordt het automatisch vernietigd wanneer het venster wordt vernietigd. Als het menu wordt toegevoegd aan een bestaand menu, wordt het automatisch vernietigd wanneer dat menu wordt vernietigd.
Voordat u afsluit, moet een toepassing systeembronnen vrijmaken die zijn gekoppeld aan een snelmenu als het menu niet is toegewezen aan een venster. Een toepassing opent een menu door de DestroyMenu lidfunctie aan te roepen.
Example
Zie het voorbeeld voor CMenu::CreateMenu.
CMenu::DeleteMenu
Hiermee verwijdert u een item uit het menu.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parameterwaarden
nPosition
Hiermee geeft u het menu-item dat moet worden verwijderd, zoals bepaald door nFlags.
nFlags
Wordt gebruikt om op de volgende manier te interpreteren nPosition :
nFlags |
Interpretatie van nPosition |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
Als het menu-item een gekoppeld pop-upmenu heeft, DeleteMenu vernietigt u de greep naar het pop-upmenu en maakt u het geheugen vrij dat door het pop-upmenu wordt gebruikt.
Wanneer een menu dat zich in een venster bevindt, wordt gewijzigd (ongeacht of het venster wordt weergegeven), moet de toepassing worden aangeroepen CWnd::DrawMenuBar.
Example
Zie het voorbeeld voor CWnd::GetMenu.
CMenu::DeleteTempMap
Als de CWinApp handler voor inactiviteit automatisch wordt aangeroepen, worden tijdelijke CMenu objecten verwijderd die door de FromHandle lidfunctie zijn gemaakt.
static void PASCAL DeleteTempMap();
Opmerkingen
DeleteTempMap loskoppelt het Windows-menuobject dat is gekoppeld aan een tijdelijk CMenu object voordat u het CMenu object verwijdert.
Example
// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();
CMenu::DestroyMenu
Vernietigt het menu en alle Windows-resources die zijn gebruikt.
BOOL DestroyMenu();
Retourwaarde
Niet-nul als het menu wordt vernietigd; anders 0.
Opmerkingen
Het menu wordt losgekoppeld van het CMenu object voordat het wordt vernietigd. De Windows-functie DestroyMenu wordt automatisch aangeroepen in de CMenu destructor.
Example
Zie het voorbeeld voor CMenu::CreateMenu.
CMenu::Detach
Loskoppelt een Windows-menu van een CMenu object en retourneert de ingang.
HMENU Detach();
Retourwaarde
De greep, van het type HMENU, naar een Windows-menu, indien geslaagd; anders NULL.
Opmerkingen
Het m_hMenu gegevenslid is ingesteld op NULL.
Example
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
Aangeroepen door het framework wanneer een visueel aspect van een door de eigenaar getekend menu verandert.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameterwaarden
lpDrawItemStruct
Een aanwijzer naar een DRAWITEMSTRUCT structuur die informatie bevat over het type tekening dat nodig is.
Opmerkingen
Het itemAction lid van de DRAWITEMSTRUCT structuur definieert de tekenactie die moet worden uitgevoerd. Overschrijf deze lidfunctie om tekening te implementeren voor een eigenaar-tekenobject CMenu . De toepassing moet alle GDI-objecten (Graphics Device Interface) herstellen die zijn geselecteerd voor de weergavecontext die is opgegeven lpDrawItemStruct vóór de beëindiging van deze lidfunctie.
Zie CWnd::OnDrawItem voor een beschrijving van de DRAWITEMSTRUCT structuur.
Example
De volgende code is afkomstig uit het MFC-voorbeeld 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
Hiermee wordt een menu-item in- of uitgeschakeld of gedimd.
UINT EnableMenuItem(
UINT nIDEnableItem,
UINT nEnable);
Parameterwaarden
nIDEnableItem
Hiermee geeft u het menu-item moet worden ingeschakeld, zoals bepaald door nEnable. Met deze parameter kunt u pop-upmenu-items en standaardmenu-items opgeven.
nEnable
Hiermee geeft u de actie op die moet worden uitgevoerd. Het kan een combinatie zijn van MF_DISABLED, MF_ENABLEDof MF_GRAYED, met MF_BYCOMMAND of MF_BYPOSITION. Deze waarden kunnen worden gecombineerd met behulp van de C++ bitwise OR-operator (|). Deze waarden hebben de volgende betekenissen:
MF_BYCOMMANDHiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardwaarde.MF_BYPOSITIONHiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0.MF_DISABLEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd, maar niet wordt gedimd.MF_ENABLEDHiermee schakelt u het menu-item in, zodat deze kan worden geselecteerd en hersteld vanuit de grijsstatus.MF_GRAYEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd en gedimd.
Retourwaarde
Vorige status (MF_DISABLED, MF_ENABLEDof ) MF_GRAYEDof -1 indien niet geldig.
Opmerkingen
De CreateMenufuncties , InsertMenuen ModifyMenuLoadMenuIndirect leden kunnen ook de status (ingeschakeld, uitgeschakeld of grijs) van een menu-item instellen.
Als u de MF_BYPOSITION waarde gebruikt, moet een toepassing de juiste CMenugebruiken. Als de CMenu menubalk wordt gebruikt, wordt een menu-item op het hoogste niveau (een item in de menubalk) beïnvloed. Als u de status van een item in een pop-upmenu of geneste pop-upmenu op positie wilt instellen, moet een toepassing het CMenu pop-upmenu opgeven.
Wanneer een toepassing de MF_BYCOMMAND vlag opgeeft, controleert Windows alle pop-upmenu-items die ondergeschikt zijn aan de CMenu; dus, tenzij er dubbele menu-items aanwezig zijn, met behulp van de CMenu menubalk is voldoende.
Example
// 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
Retourneert een aanwijzer naar een CMenu object met een Windows-ingang naar een menu.
static CMenu* PASCAL FromHandle(HMENU hMenu);
Parameterwaarden
hMenu
Een Windows-ingang naar een menu.
Retourwaarde
Een aanwijzer naar een CMenu die tijdelijk of permanent kan zijn.
Opmerkingen
Als een CMenu object nog niet is gekoppeld aan het Windows-menuobject, wordt er een tijdelijk CMenu object gemaakt en gekoppeld.
Dit tijdelijke CMenu object is alleen geldig tot de volgende keer dat de toepassing inactief is in de gebeurtenislus, waarna alle tijdelijke objecten worden verwijderd.
Example
Zie het voorbeeld voor CMenu::CreateMenu.
CMenu::GetDefaultItem
Hiermee bepaalt u de standaardmenuopdracht in het opgegeven menu.
UINT GetDefaultItem(
UINT gmdiFlags,
BOOL fByPos = FALSE);
Parameterwaarden
gmdiFlags
Waarde die aangeeft hoe de functie zoekt naar menu-items. Deze parameter kan geen, één of een combinatie van de volgende waarden zijn:
| Waarde | Meaning |
|---|---|
GMDI_GOINTOPOPUPS |
Hiermee geeft u op dat, als het standaarditem een submenu is, de functie recursief in het bijbehorende submenu moet zoeken. Als het submenu geen standaarditem bevat, geeft de retourwaarde het item aan waarmee het submenu wordt geopend. De functie retourneert standaard het eerste standaarditem in het opgegeven menu, ongeacht of het een item is waarmee een submenu wordt geopend. |
GMDI_USEDISABLED |
Hiermee geeft u op dat de functie een standaarditem retourneert, zelfs als het is uitgeschakeld. Standaard slaat de functie uitgeschakelde of grijs weergegeven items over. |
fByPos
Waarde die aangeeft of de id of positie van het menu-item moet worden opgehaald. Als deze parameter is FALSE, wordt de id geretourneerd. Anders wordt de positie geretourneerd.
Retourwaarde
Als de functie slaagt, is de retourwaarde de id of positie van het menu-item. Als de functie mislukt, is de retourwaarde - 1.
Opmerkingen
Deze lidfunctie implementeert het gedrag van de Win32-functie GetMenuDefaultItem, zoals beschreven in de Windows SDK.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::GetMenuContextHelpId
Haalt de help-id van de context op die is gekoppeld aan CMenu.
DWORD GetMenuContextHelpId() const;
Retourwaarde
De help-id van de context is momenteel gekoppeld CMenu als deze één id heeft; anders nul.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::GetMenuInfo
Hiermee haalt u informatie voor een menu op.
BOOL GetMenuInfo(LPMENUINFO lpcmi) const;
Parameterwaarden
lpcmi
Een aanwijzer naar een MENUINFO structuur met informatie voor het menu.
Retourwaarde
Als de functie slaagt, is de retourwaarde niet-nul; anders is de retourwaarde nul.
Opmerkingen
Roep deze functie aan om informatie over het menu op te halen.
CMenu::GetMenuItemCount
Bepaalt het aantal items in een snelmenu of menu op het hoogste niveau.
UINT GetMenuItemCount() const;
Retourwaarde
Het aantal items in het menu als de functie is geslaagd; anders -1.
Example
Zie het voorbeeld voor CWnd::GetMenu.
CMenu::GetMenuItemID
Hiermee haalt u de menu-item-id op voor een menu-item op de positie die is gedefinieerd door nPos.
UINT GetMenuItemID(int nPos) const;
Parameterwaarden
nPos
Hiermee geeft u de positie (op basis van nul) van het menu-item waarvan de id wordt opgehaald.
Retourwaarde
De item-id voor het opgegeven item in een snelmenu als de functie is geslaagd. Als het opgegeven item een snelmenu is (in plaats van een item in het snelmenu), is de retourwaarde -1. Als nPos dit overeenkomt met een SEPARATOR menu-item, is de retourwaarde 0.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::GetMenuItemInfo
Hiermee haalt u informatie over een menu-item op.
BOOL GetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameterwaarden
uItem
Id of positie van het menu-item om informatie over op te halen. De betekenis van deze parameter is afhankelijk van de waarde van ByPos.
lpMenuItemInfo
Een aanwijzer naar een MENUITEMINFO, zoals beschreven in de Windows SDK, die informatie over het menu bevat.
fByPos
Waarde die de betekenis van nIDItem. Standaard is FALSEdit ByPos , wat aangeeft dat uItem een menu-item-id is. Als ByPos dit niet is ingesteld FALSE, wordt een menuopdrachtpositie aangegeven.
Retourwaarde
Als de functie slaagt, is de retourwaarde niet-nul. Als de functie mislukt, is de retourwaarde nul. Als u uitgebreide foutinformatie wilt ophalen, gebruikt u de Functie Win32 GetLastError, zoals beschreven in de Windows SDK.
Opmerkingen
Deze lidfunctie implementeert het gedrag van de Win32-functie GetMenuItemInfo, zoals beschreven in de Windows SDK. Houd er rekening mee dat u in de MFC-implementatie van GetMenuItemInfo, geen ingang voor een menu gebruikt.
Example
// 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
Retourneert de status van het opgegeven menu-item of het aantal items in een snelmenu.
UINT GetMenuState(
UINT nID,
UINT nFlags) const;
Parameterwaarden
nID
Hiermee geeft u de menu-item-id, zoals bepaald door nFlags.
nFlags
Hiermee geeft u de aard van nID. Dit kan een van de volgende waarden zijn:
MF_BYCOMMANDHiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardwaarde.MF_BYPOSITIONHiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0.
Retourwaarde
De waarde 0xFFFFFFFF als het opgegeven item niet bestaat. Als nId u een pop-upmenu identificeert, bevat de byte in hoge volgorde het aantal items in het snelmenu en bevat de byte met lage volgorde de menuvlagmen die zijn gekoppeld aan het snelmenu. Anders is de retourwaarde een masker (Booleaanse OF) van de waarden uit de volgende lijst (dit masker beschrijft de status van het menu-item dat nId identificeert):
MF_CHECKEDFungeert als wisselknop omMF_UNCHECKEDhet standaard vinkje naast het item te plaatsen. Wanneer de toepassing een vinkje bitmaps levert (zie deSetMenuItemBitmapslidfunctie), wordt de bitmap 'vinkje op' weergegeven.MF_DISABLEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd, maar niet wordt gedimd.MF_ENABLEDHiermee schakelt u het menu-item in, zodat deze kan worden geselecteerd en hersteld vanuit de grijsstatus. Houd er rekening mee dat de waarde van deze constante 0 is; een toepassing mag niet testen op 0 voor fouten bij het gebruik van deze waarde.MF_GRAYEDHiermee schakelt u het menu-item uit, zodat deze niet kan worden geselecteerd en gedimd.MF_MENUBARBREAKHiermee plaatst u het item op een nieuwe regel in statische menu's of in een nieuwe kolom in pop-upmenu's. De nieuwe pop-upmenukolom wordt gescheiden van de oude kolom door een verticale scheidingslijn.MF_MENUBREAKHiermee plaatst u het item op een nieuwe regel in statische menu's of in een nieuwe kolom in pop-upmenu's. Er wordt geen scheidingslijn tussen de kolommen geplaatst.MF_SEPARATORHiermee tekent u een horizontale scheidingslijn. Kan alleen worden gebruikt in een snelmenu. Deze regel kan niet grijs worden weergegeven, uitgeschakeld of gemarkeerd. Andere parameters worden genegeerd.MF_UNCHECKEDFungeert als wisselknop omMF_CHECKEDeen vinkje naast het item te verwijderen. Wanneer de toepassing een vinkje bitmaps levert (zie deSetMenuItemBitmapslidfunctie), wordt de bitmap 'vinkje uit' weergegeven. Houd er rekening mee dat de waarde van deze constante 0 is; een toepassing mag niet testen op 0 voor fouten bij het gebruik van deze waarde.
Example
// 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
Kopieert het label van het opgegeven menu-item naar de opgegeven buffer.
int GetMenuString(
UINT nIDItem,
LPTSTR lpString,
int nMaxCount,
UINT nFlags) const;
int GetMenuString(
UINT nIDItem,
CString& rString,
UINT nFlags) const;
Parameterwaarden
nIDItem
Hiermee geeft u de geheel getal-id van het menu-item of de verschuiving van het menu-item in het menu, afhankelijk van de waarde van nFlags.
lpString
Verwijst naar de buffer die het label moet ontvangen.
rString
Een verwijzing naar een CString object dat de gekopieerde menureeks ontvangt.
nMaxCount
Hiermee geeft u de maximale lengte (in tekens) van het label dat moet worden gekopieerd. Als het label langer is dan het maximum dat is opgegeven, nMaxCountworden de extra tekens afgekapt.
nFlags
Hiermee geeft u de interpretatie van de nIDItem parameter. Dit kan een van de volgende waarden zijn:
nFlags |
Interpretatie van nIDItem |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
Retourwaarde
Hiermee geeft u het werkelijke aantal tekens op dat naar de buffer is gekopieerd, niet inclusief het null-eindteken.
Opmerkingen
De nMaxCount parameter moet één groter zijn dan het aantal tekens in het label om plaats te bieden aan het null-teken waarmee een tekenreeks wordt beëindigd.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::GetSafeHmenu
Retourneert de HMENU wrapped door dit CMenu object of een NULLCMenu aanwijzer.
HMENU GetSafeHmenu() const;
Example
Zie het voorbeeld voor CMenu::LoadMenu.
CMenu::GetSubMenu
Hiermee wordt het CMenu object van een snelmenu opgehaald.
CMenu* GetSubMenu(int nPos) const;
Parameterwaarden
nPos
Hiermee geeft u de positie van het pop-upmenu in het menu. Positiewaarden beginnen bij 0 voor het eerste menu-item. De id van het snelmenu kan niet worden gebruikt in deze functie.
Retourwaarde
Een aanwijzer naar een CMenu object waarvan m_hMenu het lid een ingang bevat voor het pop-upmenu als er een pop-upmenu op de opgegeven positie bestaat; anders NULL. Als er CMenu geen object bestaat, wordt er een tijdelijk object gemaakt. De CMenu geretourneerde aanwijzer mag niet worden opgeslagen.
Example
Zie het voorbeeld voor CMenu::TrackPopupMenu.
CMenu::InsertMenu
Hiermee voegt u een nieuw menu-item in op de positie die is opgegeven door nPosition en verplaatst u andere items omlaag in het menu.
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);
Parameterwaarden
nPosition
Hiermee geeft u het menu-item waarvoor de nieuwe menu-item moet worden ingevoegd. De nFlags parameter kan op de volgende manieren worden geïnterpreteerd nPosition :
nFlags |
Interpretatie van nPosition |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. Als nPosition dit -1 is, wordt het nieuwe menu-item toegevoegd aan het einde van het menu. |
nFlags
Hiermee geeft u op hoe nPosition wordt geïnterpreteerd en geeft u informatie op over de status van het nieuwe menu-item wanneer deze wordt toegevoegd aan het menu. Zie de AppendMenu lidfunctie voor een lijst met de vlaggen die kunnen worden ingesteld. Als u meer dan één waarde wilt opgeven, gebruikt u de bitsgewijze OF-operator om deze te combineren met de MF_BYCOMMAND of MF_BYPOSITION vlag.
nIDNewItem
Hiermee geeft u de opdracht-id van het nieuwe menu-item of, indien nFlags ingesteld MF_POPUP, de menugreep (HMENU) van het snelmenu. De nIDNewItem parameter wordt genegeerd (niet nodig) als nFlags deze is ingesteld op MF_SEPARATOR.
lpszNewItem
Hiermee geeft u de inhoud van de nieuwe menuopdracht.
nFlags kan op de volgende manieren worden geïnterpreteerd lpszNewItem :
nFlags |
Interpretatie van lpszNewItem |
|---|---|
MF_OWNERDRAW |
Bevat een 32-bits opgegeven 32-bits waarde die de toepassing kan gebruiken voor het onderhouden van extra gegevens die zijn gekoppeld aan het menu-item. Deze 32-bits waarde is beschikbaar voor de toepassing in het itemData lid van de structuur die wordt geleverd door de WM_MEASUREITEM en WM_DRAWITEM berichten. Deze berichten worden verzonden wanneer het menu-item in eerste instantie wordt weergegeven of gewijzigd. |
MF_STRING |
Bevat een lange aanwijzer naar een tekenreeks die door null is beëindigd. Dit is de standaardinterpretatie. |
MF_SEPARATOR |
De lpszNewItem parameter wordt genegeerd (niet nodig). |
pBmp
Verwijst naar een CBitmap object dat wordt gebruikt als menu-item.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
De toepassing kan de status van het menu-item opgeven door waarden in te stellen in nFlags.
Wanneer een menu dat zich in een venster bevindt, wordt gewijzigd (ongeacht of het venster wordt weergegeven), moet de toepassing worden aangeroepen CWnd::DrawMenuBar.
Wanneer nIDNewItem een pop-upmenu wordt opgegeven, wordt het onderdeel van het menu waarin het wordt ingevoegd. Als dat menu wordt vernietigd, wordt het ingevoegde menu ook vernietigd. Een ingevoegd menu moet worden losgekoppeld van een CMenu object om conflicten te voorkomen.
Als het onderliggende venster met meerdere documentinterfaces (MDI) is gemaximaliseerd en een toepassing een snelmenu invoegt in het menu van de MDI-toepassing door deze functie aan te roepen en de MF_BYPOSITION vlag op te geven, wordt het menu één positie linksboven ingevoegd dan verwacht. Dit gebeurt omdat het menu Control van het actieve onderliggende MDI-venster wordt ingevoegd in de eerste positie van de menubalk van het MDI-framevenster. Als u het menu correct wilt plaatsen, moet de toepassing 1 toevoegen aan de positiewaarde die anders zou worden gebruikt. Een toepassing kan het WM_MDIGETACTIVE bericht gebruiken om te bepalen of het momenteel actieve onderliggende venster is gemaximaliseerd.
Example
// 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
Hiermee voegt u een nieuw menu-item in op de opgegeven positie in een menu.
BOOL InsertMenuItem(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameterwaarden
uItem
Zie de beschrijving van uItem in InsertMenuItem de Windows SDK.
lpMenuItemInfo
Zie de beschrijving van lpmii in InsertMenuItem de Windows SDK.
fByPos
Zie de beschrijving van fByPosition in InsertMenuItem de Windows SDK.
Opmerkingen
Deze functie wordt verpakt InsertMenuItem, zoals beschreven in de Windows SDK.
CMenu::LoadMenu
Laadt een menuresource uit het uitvoerbare bestand van de toepassing en koppelt deze aan het CMenu object.
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
Parameterwaarden
lpszResourceName
Verwijst naar een door null beëindigde tekenreeks die de naam van de menuresource bevat die moet worden geladen.
nIDResource
Hiermee geeft u de menu-id van de menuresource die moet worden geladen.
Retourwaarde
Niet-nul als de menuresource is geladen; anders 0.
Opmerkingen
Voordat u afsluit, moet een toepassing systeembronnen vrijmaken die zijn gekoppeld aan een menu als het menu niet is toegewezen aan een venster. Een toepassing opent een menu door de DestroyMenu lidfunctie aan te roepen.
Example
// 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
Laadt een resource uit een menusjabloon in het geheugen en koppelt deze aan het CMenu object.
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
Parameterwaarden
lpMenuTemplate
Verwijst naar een menusjabloon (dit is één MENUITEMTEMPLATEHEADER structuur en een verzameling van een of meer MENUITEMTEMPLATE structuren). Zie de Windows SDK voor meer informatie over deze twee structuren.
Retourwaarde
Niet-nul als de menuresource is geladen; anders 0.
Opmerkingen
Een menusjabloon is een koptekst gevolgd door een verzameling van een of meer MENUITEMTEMPLATE structuren, die elk een of meer menu-items en pop-upmenu's kunnen bevatten.
Het versienummer moet 0 zijn.
De mtOption vlaggen moeten worden opgenomen MF_END voor het laatste item in een pop-uplijst en voor het laatste item in de hoofdlijst. Zie de AppendMenu lidfunctie voor andere vlaggen. Het mtId lid moet worden weggelaten uit de MENUITEMTEMPLATE structuur wanneer MF_POPUP deze is opgegeven in mtOption.
De ruimte die voor de MENUITEMTEMPLATE structuur is toegewezen, moet groot genoeg zijn om mtString de naam van het menu-item als een door null beëindigde tekenreeks te kunnen bevatten.
Voordat u afsluit, moet een toepassing systeembronnen vrijmaken die zijn gekoppeld aan een menu als het menu niet is toegewezen aan een venster. Een toepassing opent een menu door de DestroyMenu lidfunctie aan te roepen.
Example
// 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
Hiermee geeft u de HMENU greep van het Windows-menu dat aan het CMenu object is gekoppeld.
HMENU m_hMenu;
Example
Zie het voorbeeld voor CMenu::LoadMenu.
CMenu::MeasureItem
Aangeroepen door het framework wanneer een menu met de tekenstijl eigenaar wordt gemaakt.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameterwaarden
lpMeasureItemStruct
Een aanwijzer naar een MEASUREITEMSTRUCT structuur.
Opmerkingen
Deze lidfunctie doet standaard niets. Overschrijf deze lidfunctie en vul de MEASUREITEMSTRUCT structuur in om Windows te informeren over de afmetingen van het menu.
Zie CWnd::OnMeasureItem voor een beschrijving van de MEASUREITEMSTRUCT structuur.
Example
De volgende code is afkomstig uit het MFC-voorbeeld 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
Hiermee wijzigt u een bestaand menu-item op de positie die is opgegeven door 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);
Parameterwaarden
nPosition
Hiermee geeft u de menuopdracht die moet worden gewijzigd. De nFlags parameter kan op de volgende manieren worden geïnterpreteerd nPosition :
nFlags |
Interpretatie van nPosition |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
nFlags
Hiermee geeft u op hoe nPosition wordt geïnterpreteerd en wordt informatie gegeven over de wijzigingen die moeten worden aangebracht in het menu-item. Zie de AppendMenu lidfunctie voor een lijst met vlaggen die kunnen worden ingesteld.
nIDNewItem
Hiermee geeft u de opdracht-id van het gewijzigde menu-item of, indien nFlags ingesteld MF_POPUP, de menugreep (HMENU) van een snelmenu. De nIDNewItem parameter wordt genegeerd (niet nodig) als nFlags deze is ingesteld op MF_SEPARATOR.
lpszNewItem
Hiermee geeft u de inhoud van de nieuwe menuopdracht. De nFlags parameter kan op de volgende manieren worden geïnterpreteerd lpszNewItem :
nFlags |
Interpretatie van lpszNewItem |
|---|---|
MF_OWNERDRAW |
Bevat een 32-bits opgegeven 32-bits waarde die de toepassing kan gebruiken voor het onderhouden van extra gegevens die zijn gekoppeld aan het menu-item. Deze 32-bits waarde is beschikbaar voor de toepassing wanneer deze wordt verwerkt MF_MEASUREITEM en MF_DRAWITEM. |
MF_STRING |
Bevat een lange aanwijzer naar een door null beëindigde tekenreeks of een CString. |
MF_SEPARATOR |
De lpszNewItem parameter wordt genegeerd (niet nodig). |
pBmp
Verwijst naar een CBitmap object dat wordt gebruikt als menu-item.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
De toepassing geeft de nieuwe status van het menu-item op door waarden in te stellen in nFlags. Als deze functie een pop-upmenu vervangt dat is gekoppeld aan het menu-item, wordt het oude pop-upmenu vernietigd en wordt het geheugen vrijgemaakt dat wordt gebruikt door het pop-upmenu.
Wanneer nIDNewItem een pop-upmenu wordt opgegeven, wordt het onderdeel van het menu waarin het wordt ingevoegd. Als dat menu wordt vernietigd, wordt het ingevoegde menu ook vernietigd. Een ingevoegd menu moet worden losgekoppeld van een CMenu object om conflicten te voorkomen.
Wanneer een menu dat zich in een venster bevindt, wordt gewijzigd (ongeacht of het venster wordt weergegeven), moet de toepassing worden aangeroepen CWnd::DrawMenuBar. Als u de kenmerken van bestaande menu-items wilt wijzigen, is het veel sneller om de CheckMenuItem functies en EnableMenuItem leden te gebruiken.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::operator HMENU
Gebruik deze operator om de ingang van het CMenu object op te halen.
operator HMENU() const;
Retourwaarde
Als dit lukt, wordt de ingang van het CMenu object, anders. NULL
Opmerkingen
U kunt de ingang gebruiken om Windows-API's rechtstreeks aan te roepen.
CMenu::operator !=
Bepaalt of twee menu's logisch niet gelijk zijn.
BOOL operator!=(const CMenu& menu) const;
Parameterwaarden
menu
Een CMenu object ter vergelijking.
Opmerkingen
Test of een menuobject aan de linkerkant niet gelijk is aan een menuobject aan de rechterkant.
CMenu::operator ==
Bepaalt of twee menu's logisch gelijk zijn.
BOOL operator==(const CMenu& menu) const;
Parameterwaarden
menu
Een CMenu object ter vergelijking.
Opmerkingen
Test of een menuobject aan de linkerkant gelijk is (in termen van de HMENU waarde) aan een menuobject aan de rechterkant.
CMenu::RemoveMenu
Hiermee verwijdert u een menu-item met een gekoppeld snelmenu in het menu.
BOOL RemoveMenu(
UINT nPosition,
UINT nFlags);
Parameterwaarden
nPosition
Hiermee geeft u het menu-item dat moet worden verwijderd. De nFlags parameter kan op de volgende manieren worden geïnterpreteerd nPosition :
nFlags |
Interpretatie van nPosition |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
nFlags
Hiermee geeft u op hoe nPosition wordt geïnterpreteerd.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
De ingang voor een snelmenu wordt niet vernietigd, zodat het menu opnieuw kan worden gebruikt. Voordat u deze functie aanroept, kan de toepassing de GetSubMenu lidfunctie aanroepen om het pop-upobject CMenu op te halen voor hergebruik.
Wanneer een menu dat zich in een venster bevindt, wordt gewijzigd (ongeacht of het venster wordt weergegeven), moet de toepassing worden aangeroepen CWnd::DrawMenuBar.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::SetDefaultItem
Hiermee stelt u de standaardmenuopdracht voor het opgegeven menu in.
BOOL SetDefaultItem(
UINT uItem,
BOOL fByPos = FALSE);
Parameterwaarden
uItem
Id of positie van de nieuwe standaardmenuopdracht of - 1 voor geen standaarditem. De betekenis van deze parameter is afhankelijk van de waarde van fByPos.
fByPos
Waarde die de betekenis van uItem. Als deze parameter is FALSE, uItem is dit een menu-item-id. Anders is het een menuopdrachtpositie.
Retourwaarde
Als de functie slaagt, is de retourwaarde niet-nul. Als de functie mislukt, is de retourwaarde nul. Als u uitgebreide foutinformatie wilt ophalen, gebruikt u de Functie Win32 GetLastError, zoals beschreven in de Windows SDK.
Opmerkingen
Deze lidfunctie implementeert het gedrag van de Win32-functie SetMenuDefaultItem, zoals beschreven in de Windows SDK.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::SetMenuContextHelpId
Koppelt een help-id voor context aan CMenu.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parameterwaarden
dwContextHelpId
Context help-id die moet worden gekoppeld aan CMenu.
Retourwaarde
Niet-nul indien geslaagd; anders 0
Opmerkingen
Alle items in het menu delen deze id. Het is niet mogelijk om een Help-context-id toe te voegen aan de afzonderlijke menu-items.
Example
Zie het voorbeeld voor CMenu::InsertMenu.
CMenu::SetMenuInfo
Hiermee stelt u informatie in voor een menu.
BOOL SetMenuInfo(LPCMENUINFO lpcmi);
Parameterwaarden
lpcmi
Een aanwijzer naar een MENUINFO structuur met informatie voor het menu.
Retourwaarde
Als de functie slaagt, is de retourwaarde niet-nul; anders is de retourwaarde nul.
Opmerkingen
Roep deze functie aan om specifieke informatie over het menu in te stellen.
CMenu::SetMenuItemBitmaps
Hiermee koppelt u de opgegeven bitmaps aan een menu-item.
BOOL SetMenuItemBitmaps(
UINT nPosition,
UINT nFlags,
const CBitmap* pBmpUnchecked,
const CBitmap* pBmpChecked);
Parameterwaarden
nPosition
Hiermee geeft u de menuopdracht die moet worden gewijzigd. De nFlags parameter kan op de volgende manieren worden geïnterpreteerd nPosition :
nFlags |
Interpretatie van nPosition |
|---|---|
MF_BYCOMMAND |
Hiermee geeft u op dat de parameter de opdracht-id van het bestaande menu-item geeft. Dit is de standaardinstelling als geen van MF_BYCOMMANDMF_BYPOSITION beide is ingesteld. |
MF_BYPOSITION |
Hiermee geeft u op dat de parameter de positie van het bestaande menu-item geeft. Het eerste item bevindt zich op positie 0. |
nFlags
Hiermee geeft u op hoe nPosition wordt geïnterpreteerd.
pBmpUnchecked
Hiermee geeft u de bitmap te gebruiken voor menu-items die niet zijn ingeschakeld.
pBmpChecked
Hiermee geeft u de bitmap te gebruiken voor menu-items die zijn ingeschakeld.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
Of het menu-item nu is ingeschakeld of uitgeschakeld, windows geeft de juiste bitmap weer naast het menu-item.
Als dat wel pBmpUnchecked het pBmpChecked geval is NULL, wordt er niets naast het menu-item voor het bijbehorende kenmerk weergegeven. Als beide parameters zijn NULL, wordt in Windows het standaard vinkje gebruikt wanneer het item is ingeschakeld en wordt het vinkje verwijderd wanneer het item is uitgeschakeld.
Wanneer het menu wordt vernietigd, worden deze bitmaps niet vernietigd; de toepassing moet ze vernietigen.
De Windows-functie GetMenuCheckMarkDimensions haalt de afmetingen op van het standaard vinkje dat wordt gebruikt voor menu-items. De toepassing gebruikt deze waarden om de juiste grootte te bepalen voor de bitmaps die bij deze functie worden geleverd. Haal de grootte op, maak uw bitmaps en stel ze in.
Example
// 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
Hiermee wijzigt u informatie over een menu-item.
BOOL SetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameterwaarden
uItem
Zie de beschrijving van uItem in SetMenuItemInfo de Windows SDK.
lpMenuItemInfo
Zie de beschrijving van lpmii in SetMenuItemInfo de Windows SDK.
fByPos
Zie de beschrijving van fByPosition in SetMenuItemInfo de Windows SDK.
Opmerkingen
Deze functie wordt verpakt SetMenuItemInfo, zoals beschreven in de Windows SDK.
CMenu::TrackPopupMenu
Geeft een zwevend snelmenu weer op de opgegeven locatie en houdt de selectie van items in het snelmenu bij.
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0);
Parameterwaarden
nFlags
Hiermee geeft u schermpositie- en muispositievlagmen op. Zie TrackPopupMenu voor een lijst met beschikbare vlaggen.
x
Hiermee geeft u de horizontale positie in schermcoördinaten van het snelmenu. Afhankelijk van de waarde van de nFlags parameter kan het menu links worden uitgelijnd, rechts uitgelijnd of gecentreerd ten opzichte van deze positie.
y
Hiermee geeft u de verticale positie in schermcoördinaten van de bovenkant van het menu op het scherm.
pWnd
Hiermee geeft u het venster aan dat eigenaar is van het snelmenu. Deze parameter kan niet zijn NULL, zelfs niet als de TPM_NONOTIFY vlag is opgegeven. Dit venster ontvangt alle WM_COMMAND berichten uit het menu. In Windows-versies 3.1 en hoger ontvangt WM_COMMAND het venster pas berichten als TrackPopupMenu het wordt geretourneerd. In Windows 3.0 ontvangt WM_COMMAND het venster berichten voordat TrackPopupMenu het wordt geretourneerd.
lpRect
Genegeerd.
Retourwaarde
Deze methode retourneert het resultaat van het aanroepen TrackPopupMenu in de Windows SDK.
Opmerkingen
Een zwevend snelmenu kan overal op het scherm worden weergegeven.
Example
// 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
Geeft een zwevend snelmenu weer op de opgegeven locatie en houdt de selectie van items in het snelmenu bij.
BOOL TrackPopupMenuEx(
UINT fuFlags,
int x,
int y,
CWnd* pWnd,
LPTPMPARAMS lptpm);
Parameterwaarden
fuFlags
Hiermee geeft u verschillende functies voor het uitgebreide menu. Zie voor een lijst van alle waarden en hun betekenis TrackPopupMenuEx.
x
Hiermee geeft u de horizontale positie in schermcoördinaten van het snelmenu.
y
Hiermee geeft u de verticale positie in schermcoördinaten van de bovenkant van het menu op het scherm.
pWnd
Een aanwijzer naar het venster dat eigenaar is van het snelmenu en het ontvangen van de berichten uit het gemaakte menu. Dit venster kan elk venster van de huidige toepassing zijn, maar kan niet zijn NULL. Als u in de parameter opgeeftTPM_NONOTIFY, verzendt de functie geen berichten naar pWnd.fuFlags De functie moet terugkeren naar het venster dat wordt verwezen door pWnd het WM_COMMAND bericht te ontvangen.
lptpm
Aanwijzer naar een TPMPARAMS structuur die een gebied van het scherm aangeeft, mag het menu niet overlappen. Deze parameter kan zijn NULL.
Retourwaarde
Als u in de fuFlags parameter opgeeftTPM_RETURNCMD, is de retourwaarde de menu-item-id van het item dat de gebruiker heeft geselecteerd. Als de gebruiker het menu annuleert zonder een selectie te maken of als er een fout optreedt, is de retourwaarde 0.
Als u niet opgeeft TPM_RETURNCMD in de fuFlags parameter, is de retourwaarde niet nul als de functie slaagt en 0 als deze mislukt. Als u uitgebreide foutinformatie wilt ophalen, roept u het aan GetLastError.
Opmerkingen
Een zwevend snelmenu kan overal op het scherm worden weergegeven. Zie voor meer informatie over het afhandelen van fouten bij het maken van het snelmenu TrackPopupMenuEx.
Zie ook
MFC-voorbeeld CTRLTEST
MFC-voorbeeld DYNAMENU
CObject klasse
Hiërarchiegrafiek