CMenu Klasa

Hermetyzacja systemu Windows HMENU.

Składnia

class CMenu : public CObject

Członkowie

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 CMenufunkcje 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

CObject

CMenu

Wymagania

Nagłówka: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_SEPARATORwartość .

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 (zobacz SetMenuItemBitmaps 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 (zobacz SetMenuItemBitmaps 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ścicielem WM_MEASUREITEM menu odbiera komunikat, który pobiera wysokość i szerokość elementu menu. Komunikat WM_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_ENABLEDi MF_GRAYED

  • MF_STRING, MF_OWNERDRAW, MF_SEPARATORi wersja mapy bitowej

  • MF_MENUBARBREAK i MF_MENUBREAK

  • MF_CHECKED i MF_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_BYCOMMANDMF_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 nFlagsradiowych.

nIDLast
Określa (jako identyfikator lub przesunięcie, w zależności od wartości ) ostatni element menu w grupie przycisków nFlagsradiowych.

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ę , nIDFirstnIDLasti 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_BYCOMMANDMF_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_BYCOMMANDMF_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ą CMenuFromHandle .

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_DISABLEDMF_ENABLEDlub 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_ENABLEDjeśli jest nieprawidłowy.

Uwagi

Funkcje CreateMenuskładowe , InsertMenu, ModifyMenui 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 CMenuelementu . 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 CMenuelementu ; 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 GetMenuDefaultItemWin32 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 MENUITEMINFOw 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 GetLastErrorWin32 zgodnie z opisem w zestawie Windows SDK.

Uwagi

Ta funkcja składowa implementuje zachowanie funkcji GetMenuItemInfoWin32 zgodnie z opisem w zestawie SDK systemu Windows. Pamiętaj, że w implementacji MFC programu nie należy używać uchwytu GetMenuItemInfodo 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 (zobacz SetMenuItemBitmaps 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 (zobacz SetMenuItemBitmaps 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_BYCOMMANDMF_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 NULLCMenu 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_BYCOMMANDMF_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_SEPARATORwartość .

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 InsertMenuItemelement 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 MENUITEMTEMPLATEmtOption.

Miejsce przydzielone dla struktury musi być wystarczająco duże, MENUITEMTEMPLATEmtString 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_BYCOMMANDMF_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_SEPARATORwartość .

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_BYCOMMANDMF_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 GetLastErrorWin32 zgodnie z opisem w zestawie Windows SDK.

Uwagi

Ta funkcja składowa implementuje zachowanie funkcji SetMenuDefaultItemWin32 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_BYCOMMANDMF_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 NULLwartość , 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 SetMenuItemInfoelement 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ć NULLwartoś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