CMenu
Klasa
Hermetyzacja systemu Windows HMENU
.
Składnia
class CMenu : public CObject
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CMenu::CMenu |
CMenu Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CMenu::AppendMenu |
Dołącza nowy element na końcu tego menu. |
CMenu::Attach |
Dołącza uchwyt menu systemu Windows do CMenu obiektu. |
CMenu::CheckMenuItem |
Umieszcza znacznik wyboru obok lub usuwa znacznik wyboru z elementu menu w menu podręcznym. |
CMenu::CheckMenuRadioItem |
Umieszcza przycisk radiowy obok elementu menu i usuwa przycisk radiowy ze wszystkich innych elementów menu w grupie. |
CMenu::CreateMenu |
Tworzy puste menu i dołącza go do CMenu obiektu. |
CMenu::CreatePopupMenu |
Tworzy puste menu podręczne i dołącza je do CMenu obiektu. |
CMenu::DeleteMenu |
Usuwa określony element z menu. Jeśli element menu ma skojarzone menu podręczne, niszczy uchwyt w menu podręcznym i zwalnia pamięć używaną przez nią. |
CMenu::DeleteTempMap |
Usuwa wszystkie obiekty tymczasowe CMenu utworzone przez funkcję składową FromHandle . |
CMenu::DestroyMenu |
Niszczy menu dołączone do obiektu i zwalnia wszelką CMenu pamięć zajmowaną przez menu. |
CMenu::Detach |
Odłącza uchwyt menu systemu Windows od CMenu obiektu i zwraca uchwyt. |
CMenu::DrawItem |
Wywoływana przez platformę, gdy zmienia się wizualny aspekt menu rysowanego przez właściciela. |
CMenu::EnableMenuItem |
Włącza, wyłącza lub przyciemnia (szarości) element menu. |
CMenu::FromHandle |
Zwraca wskaźnik do CMenu obiektu podanego do uchwytu menu systemu Windows. |
CMenu::GetDefaultItem |
Określa domyślny element menu w określonym menu. |
CMenu::GetMenuContextHelpId |
Pobiera identyfikator kontekstu pomocy skojarzony z menu. |
CMenu::GetMenuInfo |
Pobiera informacje w określonym menu. |
CMenu::GetMenuItemCount |
Określa liczbę elementów w menu podręcznym lub najwyższego poziomu. |
CMenu::GetMenuItemID |
Uzyskuje identyfikator elementu menu dla elementu menu znajdującego się w określonej pozycji. |
CMenu::GetMenuItemInfo |
Pobiera informacje o elemencie menu. |
CMenu::GetMenuState |
Zwraca stan określonego elementu menu lub liczbę elementów w menu podręcznym. |
CMenu::GetMenuString |
Pobiera etykietę określonego elementu menu. |
CMenu::GetSafeHmenu |
m_hMenu Zwraca opakowany przez ten CMenu obiekt. |
CMenu::GetSubMenu |
Pobiera wskaźnik do menu podręcznego. |
CMenu::InsertMenu |
Wstawia nowy element menu w określonej pozycji, przenosząc inne elementy w dół menu. |
CMenu::InsertMenuItem |
Wstawia nowy element menu w określonej pozycji w menu. |
CMenu::LoadMenu |
Ładuje zasób menu z pliku wykonywalnego i dołącza go do CMenu obiektu. |
CMenu::LoadMenuIndirect |
Ładuje menu z szablonu menu w pamięci i dołącza je do CMenu obiektu. |
CMenu::MeasureItem |
Wywoływana przez platformę w celu określenia wymiarów menu podczas tworzenia menu rysowanego przez właściciela. |
CMenu::ModifyMenu |
Zmienia istniejący element menu w określonej pozycji. |
CMenu::RemoveMenu |
Usuwa element menu ze skojarzonym menu podręcznym z określonego menu. |
CMenu::SetDefaultItem |
Ustawia domyślny element menu dla określonego menu. |
CMenu::SetMenuContextHelpId |
Ustawia identyfikator kontekstu pomocy, który ma być skojarzony z menu. |
CMenu::SetMenuInfo |
Ustawia informacje dotyczące określonego menu. |
CMenu::SetMenuItemBitmaps |
Kojarzy określone mapy bitowe znacznika wyboru z elementem menu. |
CMenu::SetMenuItemInfo |
Zmienia informacje o elemencie menu. |
CMenu::TrackPopupMenu |
Wyświetla przestawne menu podręczne w określonej lokalizacji i śledzi wybór elementów w menu podręcznym. |
CMenu::TrackPopupMenuEx |
Wyświetla przestawne menu podręczne w określonej lokalizacji i śledzi wybór elementów w menu podręcznym. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CMenu::operator HMENU |
Pobiera uchwyt obiektu menu. |
CMenu::operator != |
Określa, czy dwa obiekty menu nie są równe. |
CMenu::operator == |
Określa, czy dwa obiekty menu są równe. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CMenu::m_hMenu |
Określa uchwyt do menu systemu Windows dołączony do CMenu obiektu. |
Uwagi
Udostępnia funkcje członkowskie do tworzenia, śledzenia, aktualizowania i niszczenia menu.
CMenu
Utwórz obiekt w ramce stosu jako lokalny, a następnie wywołaj CMenu
funkcje członkowskie , aby manipulować nowym menu zgodnie z potrzebami. Następnie wywołaj metodę CWnd::SetMenu
, aby ustawić menu na okno, a następnie natychmiast wywołaj CMenu
funkcję składową obiektu Detach
. Funkcja CWnd::SetMenu
składowa ustawia menu okna na nowe menu, powoduje ponowne wyrysowanie okna w celu odzwierciedlenia zmiany menu, a także przekazuje własność menu do okna. Wywołanie Detach
odłącza HMENU
obiekt od CMenu
obiektu, tak aby gdy zmienna lokalna CMenu
przechodzi poza zakres, CMenu
destruktor obiektów nie próbuje zniszczyć menu, które nie jest już właścicielem. Samo menu jest automatycznie niszczone, gdy okno zostanie zniszczone.
Za pomocą LoadMenuIndirect
funkcji składowej można utworzyć menu na podstawie szablonu w pamięci, ale menu utworzone na podstawie zasobu przez wywołanie LoadMenu
jest łatwiejsze w utrzymaniu, a sam zasób menu można utworzyć i zmodyfikować przez edytor menu.
Hierarchia dziedziczenia
CMenu
Wymagania
Nagłówek: afxwin.h
CMenu::AppendMenu
Dołącza nowy element na końcu menu.
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parametry
nFlags
Określa informacje o stanie nowego elementu menu po dodaniu do menu. Składa się z co najmniej jednej wartości wymienionej w sekcji Uwagi.
nIDNewItem
Określa identyfikator polecenia nowego elementu menu lub, jeśli nFlags
jest ustawiony na MF_POPUP
, uchwyt menu (HMENU
) menu. Parametr nIDNewItem
jest ignorowany (nie jest wymagany), jeśli nFlags
jest ustawiony na MF_SEPARATOR
wartość .
lpszNewItem
Określa zawartość nowego elementu menu. Parametr nFlags
służy do interpretowania lpszNewItem
w następujący sposób:
nFlags |
Interpretacja lpszNewItem |
---|---|
MF_OWNERDRAW |
Zawiera wartość 32-bitową dostarczaną przez aplikację, która może być używana do obsługi dodatkowych danych skojarzonych z elementem menu. Ta wartość 32-bitowa jest dostępna dla aplikacji podczas przetwarzania WM_MEASUREITEM i WM_DRAWITEM komunikatów. Wartość jest przechowywana w elemencie itemData członkowskim struktury dostarczonej z tymi komunikatami. |
MF_STRING |
Zawiera wskaźnik do ciągu zakończonego wartością null. Jest to domyślna interpretacja. |
MF_SEPARATOR |
Parametr lpszNewItem jest ignorowany (nie jest wymagany). |
pBmp
CBitmap
Wskazuje obiekt, który będzie używany jako element menu.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Aplikacja może określić stan elementu menu, ustawiając wartości w elemencie nFlags
. Gdy nIDNewItem
określa menu podręczne, staje się częścią menu, do którego jest dołączany. Jeśli to menu zostanie zniszczone, dołączone menu również zostanie zniszczone. Dołączane menu powinno być odłączone od obiektu, CMenu
aby uniknąć konfliktu. Należy pamiętać, że MF_STRING
i MF_OWNERDRAW
nie są prawidłowe dla wersji mapy bitowej programu AppendMenu
.
Na poniższej liście opisano flagi, które mogą być ustawione w pliku nFlags
:
MF_CHECKED
Działa jako przełącznik,MF_UNCHECKED
aby umieścić domyślny znacznik wyboru obok elementu. Gdy aplikacja dostarcza mapy bitowe znacznika wyboru (zobaczSetMenuItemBitmaps
funkcję składową), zostanie wyświetlona mapa bitowa "znacznik wyboru".MF_UNCHECKED
Działa jako przełącznik ,MF_CHECKED
aby usunąć znacznik wyboru obok elementu. Gdy aplikacja dostarcza mapy bitowe znacznika wyboru (zobaczSetMenuItemBitmaps
funkcję składową), zostanie wyświetlona mapa bitowa "znacznik wyboru".MF_DISABLED
Wyłącza element menu, aby nie można go było wybrać, ale nie przyciemnia go.MF_ENABLED
Włącza element menu, aby można go było wybrać i przywrócić ze stanu wygaszonego.MF_GRAYED
Wyłącza element menu, aby nie można było go wybrać i przyciemniać.MF_MENUBARBREAK
Umieszcza element w nowym wierszu w menu statycznym lub w nowej kolumnie w menu podręcznych. Nowa kolumna menu podręcznego zostanie oddzielona od starej kolumny pionową linią podziału.MF_MENUBREAK
Umieszcza element w nowym wierszu w menu statycznym lub w nowej kolumnie w menu podręcznych. Żadna linia podziału nie jest umieszczana między kolumnami.MF_OWNERDRAW
Określa, że element jest elementem rysowania właściciela. Gdy menu jest wyświetlane po raz pierwszy, okno będące właścicielemWM_MEASUREITEM
menu odbiera komunikat, który pobiera wysokość i szerokość elementu menu. KomunikatWM_DRAWITEM
jest wysyłany za każdym razem, gdy właściciel musi zaktualizować wygląd wizualizacji elementu menu. Ta opcja jest nieprawidłowa dla elementu menu najwyższego poziomu.MF_POPUP
Określa, że element menu ma skojarzone menu podręczne. Parametr ID określa dojście do menu podręcznego, które ma być skojarzone z elementem. Służy do dodawania menu podręcznego najwyższego poziomu lub hierarchicznego menu podręcznego do elementu menu podręcznego.MF_SEPARATOR
Rysuje linię podziału poziomego. Można go używać tylko w menu podręcznym. Nie można wygasić, wyłączyć ani wyróżnić tego wiersza. Inne parametry są ignorowane.MF_STRING
Określa, że element menu jest ciągiem znaków.
Każda z następujących grup wyświetla flagi, które wzajemnie się wykluczają i nie mogą być używane razem:
MF_DISABLED
,MF_ENABLED
iMF_GRAYED
MF_STRING
,MF_OWNERDRAW
,MF_SEPARATOR
i wersja mapy bitowejMF_MENUBARBREAK
iMF_MENUBREAK
MF_CHECKED
iMF_UNCHECKED
Za każdym razem, gdy menu znajdujące się w oknie zostanie zmienione (bez względu na to, czy okno jest wyświetlane), aplikacja powinna wywołać metodę CWnd::DrawMenuBar
.
Przykład
Zobacz przykład dla elementu CMenu::CreateMenu
.
CMenu::Attach
Dołącza istniejące menu systemu Windows do CMenu
obiektu.
BOOL Attach(HMENU hMenu);
Parametry
hMenu
Określa dojście do menu systemu Windows.
Wartość zwracana
Nonzero, jeśli operacja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Ta funkcja nie powinna być wywoływana, jeśli menu jest już dołączone do CMenu
obiektu. Uchwyt menu jest przechowywany w elemencie m_hMenu
członkowskim danych.
Jeśli menu, które chcesz manipulować, jest już skojarzone z oknem, możesz użyć CWnd::GetMenu
funkcji , aby uzyskać uchwyt do menu.
Przykład
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
Dodaje znaczniki wyboru do lub usuwa znaczniki wyboru z elementów menu w menu podręcznym.
UINT CheckMenuItem(
UINT nIDCheckItem,
UINT nCheck);
Parametry
nIDCheckItem
Określa element menu, który ma być sprawdzany, zgodnie z wartością nCheck
.
nCheck
Określa, jak sprawdzić element menu i jak określić położenie elementu w menu. Parametr nCheck
może być kombinacją MF_CHECKED
lub z flagami MF_BYPOSITION
lub MF_BYCOMMAND
MF_UNCHECKED
. Te flagi można łączyć za pomocą operatora bitowego OR. Mają one następujące znaczenie:
MF_BYCOMMAND
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to opcja domyślna.MF_BYPOSITION
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0.MF_CHECKED
Działa jako przełącznik,MF_UNCHECKED
aby umieścić domyślny znacznik wyboru obok elementu.MF_UNCHECKED
Działa jako przełącznik ,MF_CHECKED
aby usunąć znacznik wyboru obok elementu.
Wartość zwracana
Poprzedni stan elementu: MF_CHECKED
lub MF_UNCHECKED
, lub 0xFFFFFFFF
jeśli element menu nie istnieje.
Uwagi
Parametr nIDCheckItem
określa element, który ma zostać zmodyfikowany.
Parametr nIDCheckItem
może identyfikować element menu podręcznego, a także element menu. Do sprawdzenia elementu menu podręcznego nie są wymagane żadne specjalne kroki. Nie można sprawdzić elementów menu najwyższego poziomu. Element menu podręcznego musi być sprawdzany według pozycji, ponieważ nie ma skojarzonego z nim identyfikatora elementu menu.
Przykład
Zobacz przykład dla elementu CMenu::GetMenuState
.
CMenu::CheckMenuRadioItem
Sprawdza określony element menu i sprawia, że jest to element radiowy.
BOOL CheckMenuRadioItem(
UINT nIDFirst,
UINT nIDLast,
UINT nIDItem,
UINT nFlags);
Parametry
nIDFirst
Określa (jako identyfikator lub przesunięcie, w zależności od wartości ) pierwszy element menu w grupie przycisków nFlags
radiowych.
nIDLast
Określa (jako identyfikator lub przesunięcie, w zależności od wartości ) ostatni element menu w grupie przycisków nFlags
radiowych.
nIDItem
Określa (jako identyfikator lub przesunięcie, w zależności od wartości nFlags
) element w grupie, który będzie sprawdzany za pomocą przycisku radiowego.
nFlags
Określa interpretację , nIDFirst
nIDLast
i nIDItem
w następujący sposób:
nFlags | Interpretacja |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0
Uwagi
Jednocześnie funkcja usuwa zaznaczenie wszystkich innych elementów menu w skojarzonej grupie i czyści flagę typu elementu radiowego dla tych elementów. Zaznaczony element jest wyświetlany przy użyciu mapy bitowej przycisku radiowego (lub punktora) zamiast mapy bitowej znacznika wyboru.
Przykład
Zobacz przykład dla elementu ON_COMMAND_RANGE
.
CMenu::CMenu
Tworzy puste menu i dołącza go do CMenu
obiektu.
CMenu();
Uwagi
Menu nie zostanie utworzone, dopóki nie wywołasz jednej z funkcji składowych tworzenia lub ładowania elementu członkowskiego :CMenu
CMenu::CreateMenu
Tworzy menu i dołącza go do CMenu
obiektu.
BOOL CreateMenu();
Wartość zwracana
Nonzero, jeśli menu zostało utworzone pomyślnie; w przeciwnym razie 0.
Uwagi
Menu jest początkowo puste. Elementy menu można dodawać przy użyciu funkcji lub InsertMenu
składowejAppendMenu
.
Jeśli menu zostanie przypisane do okna, zostanie ono automatycznie zniszczone, gdy okno zostanie zniszczone.
Przed zakończeniem aplikacja musi zwolnić zasoby systemowe skojarzone z menu, jeśli menu nie jest przypisane do okna. Aplikacja zwalnia menu, wywołując funkcję składową DestroyMenu
.
Przykład
// 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
Tworzy menu podręczne i dołącza go do CMenu
obiektu.
BOOL CreatePopupMenu();
Wartość zwracana
Nonzero, jeśli menu podręczne zostało pomyślnie utworzone; w przeciwnym razie 0.
Uwagi
Menu jest początkowo puste. Elementy menu można dodawać przy użyciu funkcji lub InsertMenu
składowejAppendMenu
. Aplikacja może dodać menu podręczne do istniejącego menu lub menu podręcznego. Funkcja TrackPopupMenu
składowa może służyć do wyświetlania tego menu jako przestawnego menu podręcznego i śledzenia wyborów w menu podręcznym.
Jeśli menu zostanie przypisane do okna, zostanie ono automatycznie zniszczone, gdy okno zostanie zniszczone. Jeśli menu zostanie dodane do istniejącego menu, zostanie ono automatycznie zniszczone, gdy to menu zostanie zniszczone.
Przed zakończeniem aplikacja musi zwolnić zasoby systemowe skojarzone z menu podręcznego, jeśli menu nie jest przypisane do okna. Aplikacja zwalnia menu, wywołując funkcję składową DestroyMenu
.
Przykład
Zobacz przykład dla elementu CMenu::CreateMenu
.
CMenu::DeleteMenu
Usuwa element z menu.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parametry
nPosition
Określa element menu, który ma zostać usunięty, zgodnie z wartością nFlags
.
nFlags
Służy do interpretowania nPosition
w następujący sposób:
nFlags |
Interpretacja nPosition |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Jeśli element menu ma skojarzone menu podręczne, DeleteMenu
niszczy uchwyt w menu podręcznym i zwalnia pamięć używaną przez menu podręczne.
Za każdym razem, gdy menu znajdujące się w oknie zostanie zmienione (bez względu na to, czy okno jest wyświetlane), aplikacja musi wywołać metodę CWnd::DrawMenuBar
.
Przykład
Zobacz przykład dla elementu CWnd::GetMenu
.
CMenu::DeleteTempMap
Wywoływana CWinApp
automatycznie przez program obsługi bezczynności usuwa wszystkie obiekty tymczasowe utworzone przez funkcję składową CMenu
FromHandle
.
static void PASCAL DeleteTempMap();
Uwagi
DeleteTempMap
odłącza obiekt menu systemu Windows dołączony do obiektu tymczasowego CMenu
przed usunięciem CMenu
obiektu.
Przykład
// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();
CMenu::DestroyMenu
Niszczy menu i wszystkie użyte zasoby systemu Windows.
BOOL DestroyMenu();
Wartość zwracana
Nonzero, jeśli menu zostanie zniszczone; w przeciwnym razie 0.
Uwagi
Menu jest odłączone od CMenu
obiektu przed jego zniszczeniem. Funkcja systemu Windows DestroyMenu
jest automatycznie wywoływana w destruktorze CMenu
.
Przykład
Zobacz przykład dla elementu CMenu::CreateMenu
.
CMenu::Detach
Odłącza menu systemu Windows od CMenu
obiektu i zwraca uchwyt.
HMENU Detach();
Wartość zwracana
Dojście typu HMENU
, do menu systemu Windows, jeśli się powiedzie; w przeciwnym razie NULL
.
Uwagi
Element m_hMenu
członkowski danych ma wartość NULL
.
Przykład
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
Wywoływana przez platformę, gdy zmienia się wizualny aspekt menu rysowanego przez właściciela.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametry
lpDrawItemStruct
Wskaźnik do DRAWITEMSTRUCT
struktury zawierającej informacje o wymaganym typie rysunku.
Uwagi
Element itemAction
członkowski DRAWITEMSTRUCT
struktury definiuje akcję rysunku, która ma zostać wykonana. Zastąpi tę funkcję składową, aby zaimplementować rysunek dla obiektu rysowania CMenu
właściciela. Aplikacja powinna przywrócić wszystkie obiekty interfejsu urządzenia graficznego (GDI) wybrane dla kontekstu wyświetlania podanego przed lpDrawItemStruct
zakończeniem tej funkcji składowej.
Zobacz CWnd::OnDrawItem
opis DRAWITEMSTRUCT
struktury.
Przykład
Poniższy kod pochodzi z przykładu MFC 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
Włącza, wyłącza lub przyciemnia element menu.
UINT EnableMenuItem(
UINT nIDEnableItem,
UINT nEnable);
Parametry
nIDEnableItem
Określa element menu, który ma być włączony, zgodnie z wartością nEnable
. Ten parametr może określać elementy menu podręcznego, a także standardowe elementy menu.
nEnable
Określa akcję do wykonania. Może to być kombinacja , MF_DISABLED
MF_ENABLED
lub MF_GRAYED
, z MF_BYCOMMAND
lub MF_BYPOSITION
. Te wartości można łączyć przy użyciu operatora OR bitowego języka C++ (|
). Te wartości mają następujące znaczenie:
MF_BYCOMMAND
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to opcja domyślna.MF_BYPOSITION
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0.MF_DISABLED
Wyłącza element menu, aby nie można go było wybrać, ale nie przyciemnia go.MF_ENABLED
Włącza element menu, aby można go było wybrać i przywrócić ze stanu wygaszonego.MF_GRAYED
Wyłącza element menu, aby nie można było go wybrać i przyciemniać.
Wartość zwracana
Poprzedni stan (MF_DISABLED
, , lub ) lub MF_GRAYED
-1, MF_ENABLED
jeśli jest nieprawidłowy.
Uwagi
Funkcje CreateMenu
składowe , InsertMenu
, ModifyMenu
i LoadMenuIndirect
mogą również ustawiać stan (włączony, wyłączony lub wygaszony) elementu menu.
MF_BYPOSITION
Użycie wartości wymaga, aby aplikacja korzystała z poprawnego CMenu
elementu . CMenu
Jeśli pasek menu jest używany, dotyczy to elementu menu najwyższego poziomu (elementu na pasku menu). Aby ustawić stan elementu w wyskakującym lub zagnieżdżonym menu podręcznym według pozycji, aplikacja musi określić CMenu
menu podręczne.
Gdy aplikacja określa flagę MF_BYCOMMAND
, system Windows sprawdza wszystkie elementy menu podręcznego, które są podrzędne do CMenu
elementu ; w związku z tym, chyba że istnieją zduplikowane elementy menu, użycie CMenu
paska menu jest wystarczające.
Przykład
// 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
Zwraca wskaźnik do CMenu
obiektu podanego w menu uchwytu systemu Windows.
static CMenu* PASCAL FromHandle(HMENU hMenu);
Parametry
hMenu
Uchwyt systemu Windows do menu.
Wartość zwracana
Wskaźnik do, CMenu
który może być tymczasowy lub stały.
Uwagi
CMenu
Jeśli obiekt nie jest jeszcze dołączony do obiektu menu systemu Windows, zostanie utworzony i dołączony obiekt tymczasowyCMenu
.
Ten obiekt tymczasowy CMenu
jest prawidłowy tylko do następnego czasu bezczynności aplikacji w pętli zdarzeń, w którym wszystkie obiekty tymczasowe są usuwane.
Przykład
Zobacz przykład dla elementu CMenu::CreateMenu
.
CMenu::GetDefaultItem
Określa domyślny element menu w określonym menu.
UINT GetDefaultItem(
UINT gmdiFlags,
BOOL fByPos = FALSE);
Parametry
gmdiFlags
Wartość określająca sposób wyszukiwania elementów menu przez funkcję. Ten parametr nie może być żadnym, jednym lub kombinacją następujących wartości:
Wartość | Znaczenie |
---|---|
GMDI_GOINTOPOPUPS |
Określa, że jeśli domyślny element jest elementem, który otwiera podmenu, funkcja ma wyszukiwać w odpowiadającym podmenu rekursywnie. Jeśli podmenu nie ma elementu domyślnego, zwracana wartość identyfikuje element, który otwiera podmenu. Domyślnie funkcja zwraca pierwszy element domyślny w określonym menu, niezależnie od tego, czy jest to element, który otwiera podmenu. |
GMDI_USEDISABLED |
Określa, że funkcja ma zwrócić element domyślny, nawet jeśli jest wyłączony. Domyślnie funkcja pomija wyłączone lub szare elementy. |
fByPos
Wartość określająca, czy pobrać identyfikator elementu menu, czy jego położenie. Jeśli ten parametr to FALSE
, zwracany jest identyfikator. W przeciwnym razie zwracana jest pozycja.
Wartość zwracana
Jeśli funkcja powiedzie się, zwracana wartość jest identyfikatorem lub pozycją elementu menu. Jeśli funkcja zakończy się niepowodzeniem, zwracana wartość to - 1.
Uwagi
Ta funkcja składowa implementuje zachowanie funkcji GetMenuDefaultItem
Win32 zgodnie z opisem w zestawie Windows SDK.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::GetMenuContextHelpId
Pobiera identyfikator pomocy kontekstowej skojarzony z elementem CMenu
.
DWORD GetMenuContextHelpId() const;
Wartość zwracana
Identyfikator pomocy kontekstowej skojarzony obecnie z elementem CMenu
, jeśli ma jeden; zero w przeciwnym razie.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::GetMenuInfo
Pobiera informacje dotyczące menu.
BOOL GetMenuInfo(LPMENUINFO lpcmi) const;
Parametry
lpcmi
Wskaźnik do MENUINFO
struktury zawierającej informacje o menu.
Wartość zwracana
Jeśli funkcja powiedzie się, zwracana wartość jest niezerowa; w przeciwnym razie zwracana wartość to zero.
Uwagi
Wywołaj tę funkcję, aby pobrać informacje o menu.
CMenu::GetMenuItemCount
Określa liczbę elementów w menu podręcznym lub najwyższego poziomu.
UINT GetMenuItemCount() const;
Wartość zwracana
Liczba elementów w menu, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie -1.
Przykład
Zobacz przykład dla elementu CWnd::GetMenu
.
CMenu::GetMenuItemID
Uzyskuje identyfikator elementu menu dla elementu menu znajdującego się w pozycji zdefiniowanej przez nPos
.
UINT GetMenuItemID(int nPos) const;
Parametry
nPos
Określa pozycję (opartą na zerze) elementu menu, którego identyfikator jest pobierany.
Wartość zwracana
Identyfikator elementu dla określonego elementu w menu podręcznym, jeśli funkcja zakończy się pomyślnie. Jeśli określony element jest menu podręcznym (w przeciwieństwie do elementu w menu podręcznym), zwracana wartość to -1. Jeśli nPos
odpowiada SEPARATOR
elementowi menu, zwracana wartość to 0.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::GetMenuItemInfo
Pobiera informacje o elemencie menu.
BOOL GetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametry
uItem
Identyfikator lub pozycja elementu menu, aby uzyskać informacje o. Znaczenie tego parametru zależy od wartości ByPos
.
lpMenuItemInfo
Wskaźnik do elementu , zgodnie z opisem MENUITEMINFO
w zestawie WINDOWS SDK, który zawiera informacje o menu.
fByPos
Wartość określająca znaczenie elementu nIDItem
. Domyślnie element to FALSE
, który wskazuje, ByPos
że element uItem jest identyfikatorem elementu menu. Jeśli ByPos
wartość nie jest ustawiona na FALSE
, wskazuje położenie elementu menu.
Wartość zwracana
Jeśli funkcja powiedzie się, zwracana wartość jest niezerowa. Jeśli funkcja zakończy się niepowodzeniem, zwracana wartość to zero. Aby uzyskać rozszerzone informacje o błędzie, użyj funkcji GetLastError
Win32 zgodnie z opisem w zestawie Windows SDK.
Uwagi
Ta funkcja składowa implementuje zachowanie funkcji GetMenuItemInfo
Win32 zgodnie z opisem w zestawie SDK systemu Windows. Pamiętaj, że w implementacji MFC programu nie należy używać uchwytu GetMenuItemInfo
do menu.
Przykład
// 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
Zwraca stan określonego elementu menu lub liczbę elementów w menu podręcznym.
UINT GetMenuState(
UINT nID,
UINT nFlags) const;
Parametry
nID
Określa identyfikator elementu menu zgodnie z wartością nFlags
.
nFlags
Określa charakter .nID
Może to być jedna z następujących wartości:
MF_BYCOMMAND
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to opcja domyślna.MF_BYPOSITION
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0.
Wartość zwracana
Wartość 0xFFFFFFFF
, jeśli określony element nie istnieje. Jeśli nId
zostanie zidentyfikowane menu podręczne, bajt o wysokiej kolejności zawiera liczbę elementów w menu podręcznym, a bajt o niskiej kolejności zawiera flagi menu skojarzone z menu podręcznego. W przeciwnym razie zwracana wartość jest maską (logiczną OR) wartości z poniższej listy (ta maska opisuje stan elementu menu, który nId
identyfikuje):
MF_CHECKED
Działa jako przełącznik,MF_UNCHECKED
aby umieścić domyślny znacznik wyboru obok elementu. Gdy aplikacja dostarcza mapy bitowe znacznika wyboru (zobaczSetMenuItemBitmaps
funkcję składową), zostanie wyświetlona mapa bitowa "znacznik wyboru".MF_DISABLED
Wyłącza element menu, aby nie można go było wybrać, ale nie przyciemnia go.MF_ENABLED
Włącza element menu, aby można go było wybrać i przywrócić ze stanu wygaszonego. Należy pamiętać, że wartość tej stałej wynosi 0; aplikacja nie powinna testować wartości 0 w przypadku niepowodzenia podczas korzystania z tej wartości.MF_GRAYED
Wyłącza element menu, aby nie można było go wybrać i przyciemniać.MF_MENUBARBREAK
Umieszcza element w nowym wierszu w menu statycznym lub w nowej kolumnie w menu podręcznych. Nowa kolumna menu podręcznego zostanie oddzielona od starej kolumny pionową linią podziału.MF_MENUBREAK
Umieszcza element w nowym wierszu w menu statycznym lub w nowej kolumnie w menu podręcznych. Żadna linia podziału nie jest umieszczana między kolumnami.MF_SEPARATOR
Rysuje linię podziału poziomego. Można go używać tylko w menu podręcznym. Nie można wygasić, wyłączyć ani wyróżnić tego wiersza. Inne parametry są ignorowane.MF_UNCHECKED
Działa jako przełącznik ,MF_CHECKED
aby usunąć znacznik wyboru obok elementu. Gdy aplikacja dostarcza mapy bitowe znacznika wyboru (zobaczSetMenuItemBitmaps
funkcję składową), zostanie wyświetlona mapa bitowa "znacznik wyboru". Należy pamiętać, że wartość tej stałej wynosi 0; aplikacja nie powinna testować wartości 0 w przypadku niepowodzenia podczas korzystania z tej wartości.
Przykład
// 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
Kopiuje etykietę określonego elementu menu do określonego buforu.
int GetMenuString(
UINT nIDItem,
LPTSTR lpString,
int nMaxCount,
UINT nFlags) const;
int GetMenuString(
UINT nIDItem,
CString& rString,
UINT nFlags) const;
Parametry
nIDItem
Określa identyfikator liczb całkowitych elementu menu lub przesunięcie elementu menu w menu, w zależności od wartości nFlags
.
lpString
Wskazuje bufor, który ma otrzymać etykietę.
rString
Odwołanie do CString
obiektu, który ma otrzymać skopiowany ciąg menu.
nMaxCount
Określa maksymalną długość (w znakach) etykiety do skopiowania. Jeśli etykieta jest dłuższa niż maksymalna określona w pliku nMaxCount
, dodatkowe znaki są obcinane.
nFlags
Określa interpretację parametru nIDItem
. Może to być jedna z następujących wartości:
nFlags |
Interpretacja nIDItem |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
Wartość zwracana
Określa rzeczywistą liczbę znaków skopiowanych do buforu, a nie łącznie z terminatorem o wartości null.
Uwagi
Parametr nMaxCount
powinien być większy niż liczba znaków w etykiecie, aby pomieścić znak null, który kończy ciąg.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::GetSafeHmenu
HMENU
Zwraca opakowany przez ten CMenu
obiekt lub NULL
CMenu
wskaźnik.
HMENU GetSafeHmenu() const;
Przykład
Zobacz przykład dla elementu CMenu::LoadMenu
.
CMenu::GetSubMenu
Pobiera CMenu
obiekt menu podręcznego.
CMenu* GetSubMenu(int nPos) const;
Parametry
nPos
Określa położenie menu podręcznego zawartego w menu. Wartości pozycji zaczynają się od 0 dla pierwszego elementu menu. Identyfikator menu podręcznego nie może być używany w tej funkcji.
Wartość zwracana
Wskaźnik do CMenu
obiektu, którego m_hMenu
element członkowski zawiera uchwyt w menu podręcznym, jeśli menu podręczne istnieje w danej pozycji; w przeciwnym razie NULL
. CMenu
Jeśli obiekt nie istnieje, zostanie utworzony tymczasowy. Zwrócony CMenu
wskaźnik nie powinien być przechowywany.
Przykład
Zobacz przykład dla elementu CMenu::TrackPopupMenu
.
CMenu::InsertMenu
Wstawia nowy element menu w pozycji określonej przez nPosition
i przenosi inne elementy w dół 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);
Parametry
nPosition
Określa element menu, przed którym ma zostać wstawiony nowy element menu. Parametr nFlags
można interpretować nPosition
w następujący sposób:
nFlags |
Interpretacja nPosition |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. Jeśli nPosition ma wartość -1, nowy element menu jest dołączany na końcu menu. |
nFlags
Określa sposób nPosition
interpretacji i określa informacje o stanie nowego elementu menu po dodaniu do menu. Aby uzyskać listę flag, które mogą być ustawione, zobacz funkcję składową AppendMenu
. Aby określić więcej niż jedną wartość, użyj operatora bitowego OR, aby połączyć je z flagą MF_BYCOMMAND
lub MF_BYPOSITION
.
nIDNewItem
Określa identyfikator polecenia nowego elementu menu lub, jeśli nFlags
jest ustawiony na MF_POPUP
, uchwyt menu (HMENU
) menu podręcznego. Parametr nIDNewItem
jest ignorowany (nie jest wymagany), jeśli nFlags
jest ustawiony na MF_SEPARATOR
wartość .
lpszNewItem
Określa zawartość nowego elementu menu. nFlags
można użyć do interpretacji lpszNewItem
w następujący sposób:
nFlags |
Interpretacja lpszNewItem |
---|---|
MF_OWNERDRAW |
Zawiera wartość 32-bitową dostarczaną przez aplikację, która może być używana do obsługi dodatkowych danych skojarzonych z elementem menu. Ta wartość 32-bitowa jest dostępna dla aplikacji w itemData elemencie członkowskim struktury dostarczonej przez WM_MEASUREITEM komunikaty i WM_DRAWITEM . Te komunikaty są wysyłane po początkowym wyświetleniu lub zmianie elementu menu. |
MF_STRING |
Zawiera długi wskaźnik do ciągu zakończonego wartością null. Jest to domyślna interpretacja. |
MF_SEPARATOR |
Parametr lpszNewItem jest ignorowany (nie jest wymagany). |
pBmp
CBitmap
Wskazuje obiekt, który będzie używany jako element menu.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Aplikacja może określić stan elementu menu, ustawiając wartości w elemencie nFlags
.
Za każdym razem, gdy menu znajdujące się w oknie zostanie zmienione (bez względu na to, czy okno jest wyświetlane), aplikacja powinna wywołać metodę CWnd::DrawMenuBar
.
Gdy nIDNewItem
określa menu podręczne, staje się częścią menu, w którym jest wstawiony. Jeśli to menu zostanie zniszczone, wstawione menu również zostanie zniszczone. Wstawione menu powinno być odłączone od obiektu, CMenu
aby uniknąć konfliktu.
Jeśli aktywne okno podrzędne interfejsu wielu dokumentów (MDI) jest zmaksymalizowane, a aplikacja wstawia menu podręczne do menu aplikacji MDI przez wywołanie tej funkcji i określenie MF_BYPOSITION
flagi, menu zostanie wstawione o jedną pozycję dalej niż oczekiwano. Dzieje się tak, ponieważ menu Kontrolka aktywnego okna podrzędnego MDI jest wstawione do pierwszej pozycji paska menu okna ramek MDI. Aby poprawnie umieścić menu, aplikacja musi dodać wartość 1 do wartości pozycji, która w przeciwnym razie będzie używana. Aplikacja może użyć komunikatu WM_MDIGETACTIVE
, aby określić, czy obecnie aktywne okno podrzędne jest zmaksymalizowane.
Przykład
// 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
Wstawia nowy element menu w określonej pozycji w menu.
BOOL InsertMenuItem(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametry
uItem
Zobacz opis w temacie uItem
w InsertMenuItem
zestawie Windows SDK.
lpMenuItemInfo
Zobacz opis w temacie lpmii
w InsertMenuItem
zestawie Windows SDK.
fByPos
Zobacz opis w temacie fByPosition
w InsertMenuItem
zestawie Windows SDK.
Uwagi
Ta funkcja opakowuje InsertMenuItem
element opisany w zestawie Windows SDK.
CMenu::LoadMenu
Ładuje zasób menu z pliku wykonywalnego aplikacji i dołącza go do CMenu
obiektu.
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
Parametry
lpszResourceName
Wskazuje ciąg o wartości null, który zawiera nazwę zasobu menu do załadowania.
nIDResource
Określa identyfikator menu zasobu menu do załadowania.
Wartość zwracana
Niezero, jeśli zasób menu został załadowany pomyślnie; w przeciwnym razie 0.
Uwagi
Przed zakończeniem aplikacja musi zwolnić zasoby systemowe skojarzone z menu, jeśli menu nie jest przypisane do okna. Aplikacja zwalnia menu, wywołując funkcję składową DestroyMenu
.
Przykład
// 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
Ładuje zasób z szablonu menu w pamięci i dołącza go do CMenu
obiektu.
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
Parametry
lpMenuTemplate
Wskazuje szablon menu (który jest pojedynczą MENUITEMTEMPLATEHEADER
strukturą i kolekcją co najmniej jednej MENUITEMTEMPLATE
struktury). Aby uzyskać więcej informacji na temat tych dwóch struktur, zobacz Zestaw SDK systemu Windows.
Wartość zwracana
Niezero, jeśli zasób menu został załadowany pomyślnie; w przeciwnym razie 0.
Uwagi
Szablon menu to nagłówek, po którym znajduje się kolekcja co najmniej jednej struktury, z których każda może zawierać co najmniej jeden MENUITEMTEMPLATE
element menu i menu podręczne.
Numer wersji powinien mieć wartość 0.
Flagi mtOption
powinny zawierać MF_END
ostatni element na wyskakującym liście i ostatni element na głównej liście. Zobacz funkcję składową AppendMenu
, aby uzyskać inne flagi. Element mtId
członkowski musi zostać pominięty ze struktury, gdy MF_POPUP
jest określony w elemencie MENUITEMTEMPLATE
mtOption
.
Miejsce przydzielone dla struktury musi być wystarczająco duże, MENUITEMTEMPLATE
mtString
aby zawierać nazwę elementu menu jako ciąg zakończony o wartości null.
Przed zakończeniem aplikacja musi zwolnić zasoby systemowe skojarzone z menu, jeśli menu nie jest przypisane do okna. Aplikacja zwalnia menu, wywołując funkcję składową DestroyMenu
.
Przykład
// 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
Określa HMENU
uchwyt menu systemu Windows dołączony do CMenu
obiektu.
HMENU m_hMenu;
Przykład
Zobacz przykład dla elementu CMenu::LoadMenu
.
CMenu::MeasureItem
Wywoływana przez platformę po utworzeniu menu z stylem rysowania właściciela.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parametry
lpMeasureItemStruct
Wskaźnik do MEASUREITEMSTRUCT
struktury.
Uwagi
Domyślnie ta funkcja składowa nic nie robi. Zastąpi MEASUREITEMSTRUCT
tę funkcję składową i wypełnij strukturę, aby poinformować system Windows o wymiarach menu.
Zobacz CWnd::OnMeasureItem
opis MEASUREITEMSTRUCT
struktury.
Przykład
Poniższy kod pochodzi z przykładu MFC 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
Zmienia istniejący element menu w pozycji określonej przez 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);
Parametry
nPosition
Określa element menu, który ma zostać zmieniony. Parametr nFlags
można interpretować nPosition
w następujący sposób:
nFlags |
Interpretacja nPosition |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
nFlags
Określa sposób nPosition
interpretacji i udostępnia informacje o zmianach, które mają zostać wprowadzone w elemencie menu. Aby uzyskać listę flag, które mogą być ustawione, zobacz funkcję składową AppendMenu
.
nIDNewItem
Określa identyfikator polecenia zmodyfikowanego elementu menu lub, jeśli nFlags
jest ustawiony na MF_POPUP
, uchwyt menu (HMENU
) menu podręcznego. Parametr nIDNewItem
jest ignorowany (nie jest wymagany), jeśli nFlags
jest ustawiony na MF_SEPARATOR
wartość .
lpszNewItem
Określa zawartość nowego elementu menu. Parametr nFlags
można interpretować lpszNewItem
w następujący sposób:
nFlags |
Interpretacja lpszNewItem |
---|---|
MF_OWNERDRAW |
Zawiera wartość 32-bitową dostarczaną przez aplikację, która może być używana do obsługi dodatkowych danych skojarzonych z elementem menu. Ta wartość 32-bitowa jest dostępna dla aplikacji podczas jej przetwarzania MF_MEASUREITEM i MF_DRAWITEM . |
MF_STRING |
Zawiera długi wskaźnik do ciągu zakończonego wartością null lub do .CString |
MF_SEPARATOR |
Parametr lpszNewItem jest ignorowany (nie jest wymagany). |
pBmp
CBitmap
Wskazuje obiekt, który będzie używany jako element menu.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Aplikacja określa nowy stan elementu menu, ustawiając wartości w elemencie nFlags
. Jeśli ta funkcja zastępuje menu podręczne skojarzone z elementem menu, niszczy stare menu podręczne i zwalnia pamięć używaną przez menu podręczne.
Gdy nIDNewItem
określa menu podręczne, staje się częścią menu, w którym jest wstawiony. Jeśli to menu zostanie zniszczone, wstawione menu również zostanie zniszczone. Wstawione menu powinno być odłączone od obiektu, CMenu
aby uniknąć konfliktu.
Za każdym razem, gdy menu znajdujące się w oknie zostanie zmienione (bez względu na to, czy okno jest wyświetlane), aplikacja powinna wywołać metodę CWnd::DrawMenuBar
. Aby zmienić atrybuty istniejących elementów menu, znacznie szybciej jest używać funkcji składowych CheckMenuItem
i EnableMenuItem
.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::operator HMENU
Użyj tego operatora, aby pobrać uchwyt CMenu
obiektu.
operator HMENU() const;
Wartość zwracana
W przypadku powodzenia CMenu
dojście do obiektu; w przeciwnym razie NULL
.
Uwagi
Uchwyt umożliwia bezpośrednie wywoływanie interfejsów API systemu Windows.
CMenu::operator !=
Określa, czy dwa menu są logicznie nie równe.
BOOL operator!=(const CMenu& menu) const;
Parametry
menu
CMenu
Obiekt do porównania.
Uwagi
Sprawdza, czy obiekt menu po lewej stronie nie jest równy obiektowi menu po prawej stronie.
CMenu::operator ==
Określa, czy dwa menu są logicznie równe.
BOOL operator==(const CMenu& menu) const;
Parametry
menu
CMenu
Obiekt do porównania.
Uwagi
Sprawdza, czy obiekt menu po lewej stronie jest równy (jeśli chodzi HMENU
o wartość) do obiektu menu po prawej stronie.
CMenu::RemoveMenu
Usuwa element menu ze skojarzonym menu podręcznym z menu.
BOOL RemoveMenu(
UINT nPosition,
UINT nFlags);
Parametry
nPosition
Określa element menu, który ma zostać usunięty. Parametr nFlags
można interpretować nPosition
w następujący sposób:
nFlags |
Interpretacja nPosition |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
nFlags
Określa sposób nPosition
interpretowania.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Nie niszczy uchwytu w menu podręcznym, więc menu można użyć ponownie. Przed wywołaniem tej funkcji aplikacja może wywołać GetSubMenu
funkcję składową, aby pobrać obiekt podręczny CMenu
do ponownego użycia.
Za każdym razem, gdy menu znajdujące się w oknie zostanie zmienione (bez względu na to, czy okno jest wyświetlane), aplikacja musi wywołać metodę CWnd::DrawMenuBar
.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::SetDefaultItem
Ustawia domyślny element menu dla określonego menu.
BOOL SetDefaultItem(
UINT uItem,
BOOL fByPos = FALSE);
Parametry
uItem
Identyfikator lub pozycja nowego domyślnego elementu menu lub — 1 dla elementu domyślnego. Znaczenie tego parametru zależy od wartości fByPos
.
fByPos
Wartość określająca znaczenie elementu uItem
. Jeśli ten parametr to FALSE
, uItem
jest identyfikatorem elementu menu. W przeciwnym razie jest to pozycja elementu menu.
Wartość zwracana
Jeśli funkcja powiedzie się, zwracana wartość jest niezerowa. Jeśli funkcja zakończy się niepowodzeniem, zwracana wartość to zero. Aby uzyskać rozszerzone informacje o błędzie, użyj funkcji GetLastError
Win32 zgodnie z opisem w zestawie Windows SDK.
Uwagi
Ta funkcja składowa implementuje zachowanie funkcji SetMenuDefaultItem
Win32 zgodnie z opisem w zestawie Windows SDK.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::SetMenuContextHelpId
Kojarzy identyfikator pomocy kontekstowej z elementem CMenu
.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parametry
dwContextHelpId
Identyfikator pomocy kontekstowej do skojarzenia z CMenu
.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0
Uwagi
Wszystkie elementy w menu udostępniają ten identyfikator — nie można dołączyć identyfikatora kontekstu pomocy do poszczególnych elementów menu.
Przykład
Zobacz przykład dla elementu CMenu::InsertMenu
.
CMenu::SetMenuInfo
Ustawia informacje dotyczące menu.
BOOL SetMenuInfo(LPCMENUINFO lpcmi);
Parametry
lpcmi
Wskaźnik do MENUINFO
struktury zawierającej informacje o menu.
Wartość zwracana
Jeśli funkcja powiedzie się, zwracana wartość jest niezerowa; w przeciwnym razie zwracana wartość to zero.
Uwagi
Wywołaj tę funkcję, aby ustawić określone informacje o menu.
CMenu::SetMenuItemBitmaps
Kojarzy określone mapy bitowe z elementem menu.
BOOL SetMenuItemBitmaps(
UINT nPosition,
UINT nFlags,
const CBitmap* pBmpUnchecked,
const CBitmap* pBmpChecked);
Parametry
nPosition
Określa element menu, który ma zostać zmieniony. Parametr nFlags
można interpretować nPosition
w następujący sposób:
nFlags |
Interpretacja nPosition |
---|---|
MF_BYCOMMAND |
Określa, że parametr podaje identyfikator polecenia istniejącego elementu menu. Jest to wartość domyślna, jeśli ani nie MF_BYCOMMAND MF_BYPOSITION jest ustawiona. |
MF_BYPOSITION |
Określa, że parametr nadaje położenie istniejącego elementu menu. Pierwszy element znajduje się na pozycji 0. |
nFlags
Określa sposób nPosition
interpretowania.
pBmpUnchecked
Określa mapę bitową do użycia dla elementów menu, które nie są zaznaczone.
pBmpChecked
Określa mapę bitową do użycia dla zaznaczonych elementów menu.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Niezależnie od tego, czy element menu jest zaznaczony, czy niezaznaczone, system Windows wyświetla odpowiednią mapę bitową obok elementu menu.
Jeśli element pBmpUnchecked
lub pBmpChecked
ma NULL
wartość , system Windows nie wyświetla niczego obok elementu menu odpowiedniego atrybutu. Jeśli oba parametry to NULL
, system Windows używa domyślnego znacznika wyboru po zaznaczeniu elementu i usuwa znacznik wyboru, gdy element jest niezaznaczone.
Gdy menu zostanie zniszczone, mapy bitowe nie zostaną zniszczone; aplikacja musi je zniszczyć.
Funkcja systemu Windows GetMenuCheckMarkDimensions
pobiera wymiary domyślnego znacznika wyboru używanego dla elementów menu. Aplikacja używa tych wartości do określenia odpowiedniego rozmiaru map bitowych dostarczonych z tą funkcją. Pobierz rozmiar, utwórz mapy bitowe, a następnie ustaw je.
Przykład
// 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
Zmienia informacje o elemencie menu.
BOOL SetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametry
uItem
Zobacz opis w temacie uItem
w SetMenuItemInfo
zestawie Windows SDK.
lpMenuItemInfo
Zobacz opis w temacie lpmii
w SetMenuItemInfo
zestawie Windows SDK.
fByPos
Zobacz opis w temacie fByPosition
w SetMenuItemInfo
zestawie Windows SDK.
Uwagi
Ta funkcja opakowuje SetMenuItemInfo
element opisany w zestawie Windows SDK.
CMenu::TrackPopupMenu
Wyświetla przestawne menu podręczne w określonej lokalizacji i śledzi wybór elementów w menu podręcznym.
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0);
Parametry
nFlags
Określa flagi położenia ekranu i położenia myszy. Zobacz TrackPopupMenu
listę dostępnych flag.
x
Określa położenie poziome we współrzędnych ekranu menu podręcznego. W zależności od wartości parametru nFlags
menu można wyrównać do lewej, wyrównać do prawej lub wyśrodkować względem tej pozycji.
y
Określa położenie w pionie we współrzędnych ekranu u góry menu na ekranie.
pWnd
Identyfikuje okno, które jest właścicielem menu podręcznego. Ten parametr nie może mieć NULL
wartości , nawet jeśli określono flagę TPM_NONOTIFY
. To okno odbiera wszystkie WM_COMMAND
komunikaty z menu. W systemie Windows w wersji 3.1 lub nowszej okno nie odbiera WM_COMMAND
komunikatów do czasu TrackPopupMenu
powrotu. W systemie Windows 3.0 okno odbiera WM_COMMAND
komunikaty przed TrackPopupMenu
zwróceniem.
lpRect
Ignorowane.
Wartość zwracana
Ta metoda zwraca wynik wywołania TrackPopupMenu
w zestawie Windows SDK.
Uwagi
Przestawne menu podręczne może pojawić się w dowolnym miejscu na ekranie.
Przykład
// 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
Wyświetla przestawne menu podręczne w określonej lokalizacji i śledzi wybór elementów w menu podręcznym.
BOOL TrackPopupMenuEx(
UINT fuFlags,
int x,
int y,
CWnd* pWnd,
LPTPMPARAMS lptpm);
Parametry
fuFlags
Określa różne funkcje menu rozszerzonego. Aby zapoznać się z listą wszystkich wartości i ich znaczenia, zobacz TrackPopupMenuEx
.
x
Określa położenie poziome we współrzędnych ekranu menu podręcznego.
y
Określa położenie w pionie we współrzędnych ekranu u góry menu na ekranie.
pWnd
Wskaźnik do okna zawierającego menu podręczne i odbieranie komunikatów z utworzonego menu. To okno może być dowolnym oknem z bieżącej aplikacji, ale nie może być NULL
. Jeśli określisz TPM_NONOTIFY
parametr w parametrze fuFlags
, funkcja nie wysyła żadnych komunikatów do pWnd
. Funkcja musi zwrócić okno wskazywane przez pWnd
, aby otrzymać WM_COMMAND
komunikat.
lptpm
Wskaźnik do TPMPARAMS
struktury, która określa obszar ekranu, w którym menu nie powinno nakładać się. Ten parametr może mieć wartość NULL
.
Wartość zwracana
W przypadku określenia TPM_RETURNCMD
w parametrze fuFlags
wartość zwracana jest identyfikatorem elementu menu wybranego przez użytkownika. Jeśli użytkownik anuluje menu bez zaznaczenia lub wystąpi błąd, zwracana wartość to 0.
Jeśli nie określisz TPM_RETURNCMD
parametru fuFlags
, zwracana wartość jest niezerowa, jeśli funkcja powiedzie się i 0, jeśli zakończy się niepowodzeniem. Aby uzyskać rozszerzone informacje o błędzie, wywołaj metodę GetLastError
.
Uwagi
Przestawne menu podręczne może pojawić się w dowolnym miejscu na ekranie. Aby uzyskać więcej informacji na temat obsługi błędów podczas tworzenia menu podręcznego, zobacz TrackPopupMenuEx
.
Zobacz też
Przykład MFC CTRLTEST
Przykład MFC DYNAMENU
CObject
Klasa
Wykres hierarchii