CMenu Sınıf

Windows HMENUkapsüllemesi.

Sözdizimi

class CMenu : public CObject

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CMenu::CMenu Bir CMenu nesne oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CMenu::AppendMenu Bu menünün sonuna yeni bir öğe ekler.
CMenu::Attach Bir nesneye Windows menü tutamacını CMenu ekler.
CMenu::CheckMenuItem Açılır menüdeki bir menü öğesinin yanına onay işareti yerleştirir veya bir onay işaretini kaldırır.
CMenu::CheckMenuRadioItem Menü öğesinin yanına bir radyo düğmesi yerleştirir ve radyo düğmesini gruptaki diğer tüm menü öğelerinden kaldırır.
CMenu::CreateMenu Boş bir menü oluşturur ve bunu bir CMenu nesneye ekler.
CMenu::CreatePopupMenu Boş bir açılır menü oluşturur ve bunu bir CMenu nesneye ekler.
CMenu::DeleteMenu Belirtilen öğeyi menüden siler. Menü öğesinin ilişkili bir açılır menüsü varsa, açılır menünün tutamacını yok eder ve bu menü tarafından kullanılan belleği serbest bırakır.
CMenu::DeleteTempMap Üye işlevi tarafından FromHandle oluşturulan tüm geçici CMenu nesneleri siler.
CMenu::DestroyMenu Bir CMenu nesneye bağlı menüyü yok eder ve menünün kaplandığı tüm belleği serbest bırakır.
CMenu::Detach Bir nesneden CMenu Windows menü tutamacını ayırır ve tutamacı döndürür.
CMenu::DrawItem Sahip tarafından çizilen menünün görsel bir yönü değiştiğinde çerçeve tarafından çağrılır.
CMenu::EnableMenuItem Menü öğesini etkinleştirir, devre dışı bırakır veya soluk (griler).
CMenu::FromHandle Windows menü tutamacı verilen bir CMenu nesnenin işaretçisini döndürür.
CMenu::GetDefaultItem Belirtilen menüde varsayılan menü öğesini belirler.
CMenu::GetMenuContextHelpId Menüyle ilişkilendirilmiş yardım bağlamı kimliğini alır.
CMenu::GetMenuInfo Belirli bir menüdeki bilgileri alır.
CMenu::GetMenuItemCount Bir açılır menüdeki veya en üst düzey menüdeki öğelerin sayısını belirler.
CMenu::GetMenuItemID Belirtilen konumda bulunan bir menü öğesinin menü öğesi tanımlayıcısını alır.
CMenu::GetMenuItemInfo Menü öğesi hakkındaki bilgileri alır.
CMenu::GetMenuState Belirtilen menü öğesinin durumunu veya açılır menüdeki öğe sayısını döndürür.
CMenu::GetMenuString Belirtilen menü öğesinin etiketini alır.
CMenu::GetSafeHmenu Bu CMenu nesne tarafından sarmalanan değerini m_hMenu döndürür.
CMenu::GetSubMenu Açılır menünün işaretçisini alır.
CMenu::InsertMenu Belirtilen konuma yeni bir menü öğesi ekler ve diğer öğeleri menüde aşağı taşır.
CMenu::InsertMenuItem Bir menüde belirtilen konuma yeni bir menü öğesi ekler.
CMenu::LoadMenu Yürütülebilir dosyadan bir menü kaynağı yükler ve bunu bir CMenu nesneye ekler.
CMenu::LoadMenuIndirect Bellekteki bir menü şablonundan menüyü yükler ve bir CMenu nesneye ekler.
CMenu::MeasureItem Sahip tarafından çizilen bir menü oluşturulduğunda menü boyutlarını belirlemek için çerçeve tarafından çağrılır.
CMenu::ModifyMenu Varolan bir menü öğesini belirtilen konumda değiştirir.
CMenu::RemoveMenu Belirtilen menüden ilişkili açılır menüye sahip bir menü öğesini siler.
CMenu::SetDefaultItem Belirtilen menü için varsayılan menü öğesini ayarlar.
CMenu::SetMenuContextHelpId Yardım bağlam kimliğini menüyle ilişkilendirilecek şekilde ayarlar.
CMenu::SetMenuInfo Belirli bir menüdeki bilgileri ayarlar.
CMenu::SetMenuItemBitmaps Belirtilen onay işareti bit eşlemlerini bir menü öğesiyle ilişkilendirir.
CMenu::SetMenuItemInfo Menü öğesi hakkındaki bilgileri değiştirir.
CMenu::TrackPopupMenu Belirtilen konumda kayan bir açılır menü görüntüler ve açılır menüdeki öğelerin seçimini izler.
CMenu::TrackPopupMenuEx Belirtilen konumda kayan bir açılır menü görüntüler ve açılır menüdeki öğelerin seçimini izler.

Ortak İşleçler

Veri Akışı Adı Açıklama
CMenu::operator HMENU Menü nesnesinin tutamacını alır.
CMenu::operator != İki menü nesnesinin eşit olup olmadığını belirler.
CMenu::operator == İki menü nesnesinin eşit olup olmadığını belirler.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
CMenu::m_hMenu Nesneye bağlı Windows menüsünün tutamacını CMenu belirtir.

Açıklamalar

Menü oluşturmak, izlemek, güncelleştirmek ve yok etmek için üye işlevleri sağlar.

Yığın çerçevesinde yerel olarak bir CMenu nesne oluşturun, ardından yeni menüyü gerektiği gibi işlemek için 'nin üye işlevlerini çağırın CMenu. Ardından, menüyü bir pencereye ayarlamak için çağırın CWnd::SetMenu ve ardından hemen nesnenin CMenu Detach üye işlevine bir çağrı yapın. CWnd::SetMenu Üye işlevi pencerenin menüsünü yeni menüye ayarlar, pencerenin yeniden çizilmesine menü değişikliğini yansıtacak şekilde neden olur ve ayrıca menünün sahipliğini pencereye geçirir. çağrısı Detach nesnesini nesnesinden CMenu ayırırHMENU, böylece yerel CMenu değişken kapsamın dışına çıktığında nesne CMenu yıkıcı artık sahip olmadığı bir menüyü yok etmeye çalışmaz. Pencere yok edildiğinde menünün kendisi otomatik olarak yok edilir.

Bellekteki LoadMenuIndirect bir şablondan menü oluşturmak için üye işlevini kullanabilirsiniz, ancak çağrısıyla LoadMenu kaynaktan oluşturulan menü daha kolay korunur ve menü kaynağının kendisi menü düzenleyicisi tarafından oluşturulabilir ve değiştirilebilir.

Devralma Hiyerarşisi

CObject

CMenu

Gereksinimler

Üstbilgi: afxwin.h

CMenu::AppendMenu

Menünün sonuna yeni bir öğe ekler.

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp);

Parametreler

nFlags
Yeni menü öğesinin menüye eklendiğinde durumu hakkındaki bilgileri belirtir. Açıklamalar bölümünde listelenen değerlerden bir veya daha fazladan oluşur.

nIDNewItem
Yeni menü öğesinin komut kimliğini veya olarak ayarlandıysa nFlags MF_POPUPaçılır menünün menü tutamacını (HMENU) belirtir. nIDNewItem parametresi olarak ayarlanırsa nFlags MF_SEPARATORparametresi yoksayılır (gerekli değildir).

lpszNewItem
Yeni menü öğesinin içeriğini belirtir. nFlags parametresi aşağıdaki şekilde yorumlamak lpszNewItem için kullanılır:

nFlags Yorumlanması lpszNewItem
MF_OWNERDRAW Uygulamanın menü öğesiyle ilişkili ek verileri korumak için kullanabileceği, uygulama tarafından sağlanan 32 bit değeri içerir. Bu 32 bit değer, uygulama ve iletileri işlerken WM_MEASUREITEM WM_DRAWITEM kullanılabilir. değeri, bu iletilerle birlikte sağlanan yapının üyesinde itemData depolanır.
MF_STRING Null olarak sonlandırılan bir dizeye işaretçi içerir. Bu varsayılan yorumdur.
MF_SEPARATOR lpszNewItem parametresi yoksayılır (gerekli değildir).

pBmp
Menü öğesi olarak kullanılacak bir CBitmap nesneye işaret eder.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Uygulama, içindeki nFlagsdeğerleri ayarlayarak menü öğesinin durumunu belirtebilir. nIDNewItem Bir açılır menü belirttiğinde, eklendiği menünün bir parçası olur. Bu menü yok edilirse, eklenen menü de yok edilir. Çakışmayı önlemek için eklenen menü nesneden CMenu ayrılmalıdır. ve MF_OWNERDRAW değerlerinin MF_STRING bit eşlem sürümü AppendMenuiçin geçerli olmadığını unutmayın.

Aşağıdaki listede, içinde nFlagsayarlanabilecek bayraklar açıklanmaktadır:

  • MF_CHECKED Öğesinin yanına varsayılan onay işaretini yerleştirmek için iki durumlu MF_UNCHECKED düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevine SetMenuItemBitmaps bakın), "onay işareti açık" bit eşlem görüntülenir.

  • MF_UNCHECKED Öğenin yanındaki onay işaretini kaldırmak için iki durumlu MF_CHECKED düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevine SetMenuItemBitmaps bakın), "onay işareti kapalı" bit eşlemi görüntülenir.

  • MF_DISABLED Menü öğesini devre dışı bırakır, böylece seçilemez ancak soluk olmaz.

  • MF_ENABLED Menü öğesinin seçilebilmesini sağlar ve soluk durumundan geri yükler.

  • MF_GRAYED Menü öğesini devre dışı bırakır, böylece seçilemez ve soluk görünür.

  • MF_MENUBARBREAK Öğeyi statik menülerde yeni bir satıra veya açılır menülerde yeni bir sütuna yerleştirir. Yeni açılır menü sütunu, eski sütundan dikey bir bölme çizgisiyle ayrılır.

  • MF_MENUBREAK Öğeyi statik menülerde yeni bir satıra veya açılır menülerde yeni bir sütuna yerleştirir. Sütunlar arasına bölme çizgisi yerleştirilmemiştir.

  • MF_OWNERDRAW Öğenin sahip çizim öğesi olduğunu belirtir. Menü ilk kez görüntülendiğinde, menünün sahibi olan pencere, menü öğesinin yüksekliğini ve genişliğini alan bir WM_MEASUREITEM ileti alır. İleti WM_DRAWITEM , sahibin menü öğesinin görsel görünümünü güncelleştirmesi gerektiğinde gönderilen iletidir. Bu seçenek en üst düzey menü öğesi için geçerli değildir.

  • MF_POPUP Menü öğesinin kendisiyle ilişkilendirilmiş bir açılır menüsü olduğunu belirtir. ID parametresi, öğeyle ilişkilendirilecek bir açılır menünün tanıtıcısını belirtir. Bu, bir açılır menü öğesine en üst düzey açılır menü veya hiyerarşik bir açılır menü eklemek için kullanılır.

  • MF_SEPARATOR Yatay bir bölme çizgisi çizer. Yalnızca açılır menüde kullanılabilir. Bu satır soluk görüntülenemez, devre dışı bırakılamaz veya vurgulanamaz. Diğer parametreler yoksayılır.

  • MF_STRING Menü öğesinin bir karakter dizesi olduğunu belirtir.

Aşağıdaki grupların her biri, birbirini dışlayan ve birlikte kullanılamayabilecek bayrakları listeler:

  • MF_DISABLED, MF_ENABLEDve MF_GRAYED

  • MF_STRING, MF_OWNERDRAW, MF_SEPARATORve bit eşlem sürümü

  • MF_MENUBARBREAK ve MF_MENUBREAK

  • MF_CHECKED ve MF_UNCHECKED

Pencerede bulunan bir menü her değiştirildiğinde (pencere görüntülenip görüntülenmeyeceği), uygulamanın öğesini çağırması CWnd::DrawMenuBargerekir.

Örnek

örneğine CMenu::CreateMenubakın.

CMenu::Attach

Var olan bir Windows menüsünü bir CMenu nesneye ekler.

BOOL Attach(HMENU hMenu);

Parametreler

hMenu
Windows menüsünün tanıtıcısını belirtir.

Dönüş Değeri

İşlem başarılı olursa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Nesneye CMenu zaten bir menü eklenmişse bu işlev çağrılmamalıdır. Menü tutamacı veri üyesinde m_hMenu depolanır.

İşlemek istediğiniz menü zaten bir pencereyle ilişkiliyse, menüye CWnd::GetMenu bir tanıtıcı almak için işlevini kullanabilirsiniz.

Örnek

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

Açılır menüdeki menü öğelerine onay işaretleri ekler veya onay işaretlerini kaldırır.

UINT CheckMenuItem(
    UINT nIDCheckItem,
    UINT nCheck);

Parametreler

nIDCheckItem
tarafından nCheckbelirlendiği gibi denetlenecek menü öğesini belirtir.

nCheck
Menü öğesinin nasıl denetleneceğini ve öğenin menüdeki konumunun nasıl belirleneceğini belirtir. nCheck parametresi, veya MF_UNCHECKED ile MF_BYPOSITION veya MF_BYCOMMAND bayraklarının MF_CHECKED bir bileşimi olabilir. Bu bayraklar bit düzeyinde OR işleci kullanılarak birleştirilebilir. Bunlar aşağıdaki anlamlara sahiptir:

  • MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu varsayılan seçenektir.

  • MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

  • MF_CHECKED Öğesinin yanına varsayılan onay işaretini yerleştirmek için iki durumlu MF_UNCHECKED düğme işlevi görür.

  • MF_UNCHECKED Öğenin yanındaki onay işaretini kaldırmak için iki durumlu MF_CHECKED düğme işlevi görür.

Dönüş Değeri

Öğenin önceki durumu: MF_CHECKED veya MF_UNCHECKEDveya 0xFFFFFFFF menü öğesi yoksa.

Açıklamalar

nIDCheckItem parametresi değiştirilecek öğeyi belirtir.

nIDCheckItem parametresi hem açılır menü öğesini hem de menü öğesini tanımlayabilir. Açılır menü öğesini denetlemek için özel bir adım gerekmez. Üst düzey menü öğeleri denetlenemez. Bir açılır menü öğesi, kendisiyle ilişkilendirilmiş bir menü öğesi tanımlayıcısı olmadığından konuma göre denetlenmelidir.

Örnek

örneğine CMenu::GetMenuStatebakın.

CMenu::CheckMenuRadioItem

Belirtilen menü öğesini denetler ve bir radyo öğesi yapar.

BOOL CheckMenuRadioItem(
    UINT nIDFirst,
    UINT nIDLast,
    UINT nIDItem,
    UINT nFlags);

Parametreler

nIDFirst
Radyo düğmesi grubundaki ilk menü öğesini belirtir (değerine nFlagsbağlı olarak kimlik veya uzaklık olarak).

nIDLast
Radyo düğmesi grubundaki son menü öğesini belirtir (değerine nFlagsbağlı olarak kimlik veya uzaklık olarak).

nIDItem
Gruptaki bir radyo düğmesiyle denetlenecek öğeyi (değerine nFlagsbağlı olarak kimlik veya uzaklık olarak) belirtir.

nFlags
, nIDLastve nIDItem yorumlarını nIDFirstaşağıdaki şekilde belirtir:

nFlags Yorumlama
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

Dönüş Değeri

Başarılı olursa sıfır olmayan; aksi takdirde 0

Açıklamalar

Aynı zamanda işlev, ilişkili gruptaki diğer tüm menü öğelerinin işaretini kaldırır ve bu öğeler için radyo öğesi türü bayrağını temizler. İşaretlenen öğe, onay işareti bit eşlemi yerine radyo düğmesi (veya madde işareti) bit eşlemi kullanılarak görüntülenir.

Örnek

örneğine ON_COMMAND_RANGEbakın.

CMenu::CMenu

Boş bir menü oluşturur ve bunu bir CMenu nesneye ekler.

CMenu();

Açıklamalar

menü, öğesinin oluşturma veya yükleme üye işlevlerinden CMenubirini çağırana kadar oluşturulmaz:

CMenu::CreateMenu

Bir menü oluşturur ve bunu nesneye CMenu ekler.

BOOL CreateMenu();

Dönüş Değeri

Menü başarıyla oluşturulduysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Menü başlangıçta boş olur. Menü öğeleri veya InsertMenu üye işlevi kullanılarak AppendMenu eklenebilir.

Menü bir pencereye atanmışsa, pencere yok edildiğinde otomatik olarak yok edilir.

Çıkış öncesinde, menü bir pencereye atanmamışsa, uygulamanın menüyle ilişkili sistem kaynaklarını boşaltması gerekir. Bir uygulama üye işlevini çağırarak menüyü DestroyMenu serbesttir.

Örnek

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

Bir açılır menü oluşturur ve bunu nesneye CMenu ekler.

BOOL CreatePopupMenu();

Dönüş Değeri

Açılır menü başarıyla oluşturulduysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Menü başlangıçta boş olur. Menü öğeleri veya InsertMenu üye işlevi kullanılarak AppendMenu eklenebilir. Uygulama açılır menüyü mevcut bir menüye veya açılır menüye ekleyebilir. Üye TrackPopupMenu işlevi, bu menüyü kayan açılır menü olarak görüntülemek ve açılır menüde seçimleri izlemek için kullanılabilir.

Menü bir pencereye atanmışsa, pencere yok edildiğinde otomatik olarak yok edilir. Menü mevcut bir menüye eklenirse, menü yok edildiğinde otomatik olarak yok edilir.

Çıkış öncesinde, menü bir pencereye atanmamışsa bir uygulamanın açılır menüyle ilişkili sistem kaynaklarını boşaltması gerekir. Bir uygulama üye işlevini çağırarak menüyü DestroyMenu serbesttir.

Örnek

örneğine CMenu::CreateMenubakın.

CMenu::DeleteMenu

Menüden bir öğeyi siler.

BOOL DeleteMenu(
    UINT nPosition,
    UINT nFlags);

Parametreler

nPosition
tarafından nFlagsbelirlendiği gibi silinecek menü öğesini belirtir.

nFlags
Aşağıdaki şekilde yorumlamak nPosition için kullanılır:

nFlags Yorumlanması nPosition
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Menü öğesinin ilişkili bir açılır menüsü varsa, DeleteMenu açılır menünün tutamacını yok eder ve açılır menü tarafından kullanılan belleği serbest bırakır.

Pencerede bulunan bir menü her değiştirildiğinde (pencerenin görüntülenip görüntülenmeyeceği), uygulamanın öğesini çağırması CWnd::DrawMenuBargerekir.

Örnek

örneğine CWnd::GetMenubakın.

CMenu::DeleteTempMap

Boşta kalma zamanı işleyicisi tarafından CWinApp otomatik olarak çağrılır, üye işlevi tarafından FromHandle oluşturulan geçici CMenu nesneleri siler.

static void PASCAL DeleteTempMap();

Açıklamalar

DeleteTempMapnesneyi silmeden CMenu önce geçici CMenu bir nesneye iliştirilmiş Windows menü nesnesini ayırır.

Örnek

// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();

CMenu::DestroyMenu

Menüyü ve kullanılan Tüm Windows kaynaklarını yok eder.

BOOL DestroyMenu();

Dönüş Değeri

Menü yok edilirse sıfır olmayan; aksi takdirde 0.

Açıklamalar

Menü, yok edilmeden önce nesneden CMenu ayrılır. Windows DestroyMenu işlevi, yıkıcıda CMenu otomatik olarak çağrılır.

Örnek

örneğine CMenu::CreateMenubakın.

CMenu::Detach

Windows menüsünü bir CMenu nesneden ayırır ve tutamacı döndürür.

HMENU Detach();

Dönüş Değeri

başarılı olursa, windows menüsüne türündeki HMENUtanıtıcı; aksi takdirde NULL.

Açıklamalar

Veri m_hMenu üyesi olarak NULLayarlanır.

Örnek

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

Sahip tarafından çizilen menünün görsel bir yönü değiştiğinde çerçeve tarafından çağrılır.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametreler

lpDrawItemStruct
Gerekli çizim türü hakkında bilgi içeren bir DRAWITEMSTRUCT yapı işaretçisi.

Açıklamalar

Yapının itemAction üyesi DRAWITEMSTRUCT , gerçekleştirilecek çizim eylemini tanımlar. Sahip çizim CMenu nesnesi için çizim uygulamak için bu üye işlevini geçersiz kılın. Uygulama, bu üye işlevinin sonlandırılmasından önce içinde lpDrawItemStruct sağlanan görüntü bağlamı için seçilen tüm grafik cihaz arabirimi (GDI) nesnelerini geri yüklemelidir.

Yapının açıklaması DRAWITEMSTRUCT için bkzCWnd::OnDrawItem.

Örnek

Aşağıdaki kod MFC CTRLTEST örneğinden alınmalıdır:

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

Menü öğesini etkinleştirir, devre dışı bırakır veya karartır.

UINT EnableMenuItem(
    UINT nIDEnableItem,
    UINT nEnable);

Parametreler

nIDEnableItem
tarafından nEnablebelirlendiği gibi etkinleştirilecek menü öğesini belirtir. Bu parametre, açılır menü öğelerinin yanı sıra standart menü öğelerini de belirtebilir.

nEnable
Gerçekleştirecek eylemi belirtir. veya ile MF_BYCOMMAND MF_BYPOSITION, MF_ENABLEDveya MF_GRAYEDbirleşimi olabilirMF_DISABLED. Bu değerler C++ bit düzeyinde OR işleci (|) kullanılarak birleştirilebilir. Bu değerler aşağıdaki anlamlara sahiptir:

  • MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu varsayılan seçenektir.

  • MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

  • MF_DISABLED Menü öğesini devre dışı bırakır, böylece seçilemez ancak soluk olmaz.

  • MF_ENABLED Menü öğesinin seçilebilmesini sağlar ve soluk durumundan geri yükler.

  • MF_GRAYED Menü öğesini devre dışı bırakır, böylece seçilemez ve soluk görünür.

Dönüş Değeri

Geçerli değilse önceki durum (MF_DISABLED, MF_ENABLED, veya MF_GRAYED) veya -1.

Açıklamalar

CreateMenu, InsertMenu, ModifyMenuve LoadMenuIndirect üye işlevleri bir menü öğesinin durumunu da (etkin, devre dışı veya soluk) ayarlayabilir.

değerini kullanmak MF_BYPOSITION için bir uygulamanın doğru CMenudeğerini kullanması gerekir. CMenu Menü çubuğunun kullanılması durumunda, en üst düzey menü öğesi (menü çubuğundaki bir öğe) etkilenir. Açılan veya iç içe açılan menüdeki bir öğenin durumunu konuma göre ayarlamak için, uygulamanın açılır menünün durumunu belirtmesi CMenu gerekir.

Bir uygulama bayrağını belirttiğinde MF_BYCOMMAND , Windows öğesinin alt CMenuöğesi olan tüm açılır menü öğelerini denetler; bu nedenle, yinelenen menü öğeleri yoksa, menü çubuğunun kullanılması CMenu yeterlidir.

Örnek

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

Menüye Windows tutamacı verilen nesneye CMenu bir işaretçi döndürür.

static CMenu* PASCAL FromHandle(HMENU hMenu);

Parametreler

hMenu
Menüye bir Windows tutamacı.

Dönüş Değeri

Geçici veya kalıcı olabilecek bir CMenu işaretçi.

Açıklamalar

Bir CMenu nesne Windows menü nesnesine zaten bağlı değilse, geçici CMenu bir nesne oluşturulur ve eklenir.

Bu geçici CMenu nesne yalnızca, uygulamanın olay döngüsünde boşta kalma süresine sahip olduğu ve tüm geçici nesnelerin silindiği bir sonraki zamana kadar geçerlidir.

Örnek

örneğine CMenu::CreateMenubakın.

CMenu::GetDefaultItem

Belirtilen menüde varsayılan menü öğesini belirler.

UINT GetDefaultItem(
    UINT gmdiFlags,
    BOOL fByPos = FALSE);

Parametreler

gmdiFlags
İşlevin menü öğelerini nasıl arayacağını belirten değer. Bu parametre yok, bir veya aşağıdaki değerlerin birleşimi olabilir:

Değer Anlamı
GMDI_GOINTOPOPUPS Varsayılan öğe bir alt menüyü açan öğeyse işlevin ilgili alt menüde özyinelemeli olarak arama yapmak olduğunu belirtir. Alt menü varsayılan öğe içermiyorsa, dönüş değeri alt menüyü açan öğeyi tanımlar.

Varsayılan olarak işlev, alt menüyü açan bir öğe olup olmadığına bakılmaksızın belirtilen menüdeki ilk varsayılan öğeyi döndürür.
GMDI_USEDISABLED İşlevin, devre dışı bırakılmış olsa bile varsayılan öğeyi döndürmek olduğunu belirtir.

Varsayılan olarak, işlev devre dışı veya gri öğeler atlar.

fByPos
Menü öğesinin tanımlayıcısının mı yoksa konumunun mu alınacağını belirten değer. Bu parametre ise FALSE, tanımlayıcı döndürülür. Aksi takdirde, konum döndürülür.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri menü öğesinin tanımlayıcısı veya konumudur. İşlev başarısız olursa, dönüş değeri - 1 olur.

Açıklamalar

Bu üye işlevi, Windows SDK'da açıklandığı gibi Win32 işlevinin GetMenuDefaultItemdavranışını uygular.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::GetMenuContextHelpId

ile CMenuilişkili bağlam yardım kimliğini alır.

DWORD GetMenuContextHelpId() const;

Dönüş Değeri

Şu anda ilişkili CMenu olan bağlam yardım kimliği varsa bir, değilse sıfır.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::GetMenuInfo

Bir menünün bilgilerini alır.

BOOL GetMenuInfo(LPMENUINFO lpcmi) const;

Parametreler

lpcmi
Menüye ilişkin bilgileri içeren bir MENUINFO yapıya yönelik işaretçi.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri sıfır değildir; aksi takdirde, dönüş değeri sıfırdır.

Açıklamalar

Menü hakkındaki bilgileri almak için bu işlevi çağırın.

CMenu::GetMenuItemCount

Bir açılır menüdeki veya en üst düzey menüdeki öğelerin sayısını belirler.

UINT GetMenuItemCount() const;

Dönüş Değeri

İşlev başarılı olursa menüdeki öğe sayısı; aksi takdirde -1.

Örnek

örneğine CWnd::GetMenubakın.

CMenu::GetMenuItemID

tarafından nPostanımlanan konumda bulunan bir menü öğesinin menü öğesi tanımlayıcısını alır.

UINT GetMenuItemID(int nPos) const;

Parametreler

nPos
Kimliği alınan menü öğesinin konumunu (sıfır tabanlı) belirtir.

Dönüş Değeri

İşlev başarılı olursa, bir açılır menüde belirtilen öğenin öğe kimliği. Belirtilen öğe bir açılır menüyse (açılır menüdeki bir öğenin aksine), dönüş değeri -1 olur. Bir SEPARATOR menü öğesine karşılık geliyorsanPos, dönüş değeri 0'dır.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::GetMenuItemInfo

Menü öğesi hakkındaki bilgileri alır.

BOOL GetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

Parametreler

uItem
Hakkında bilgi almak için menü öğesinin tanımlayıcısı veya konumu. Bu parametrenin anlamı değerine ByPosbağlıdır.

lpMenuItemInfo
Windows SDK'da açıklandığı gibi, menü hakkında bilgi içeren bir MENUITEMINFOişaretçi.

fByPos
değerinin anlamını belirten değer nIDItem. Varsayılan olarak, ByPos FALSEuItem öğesinin bir menü öğesi tanımlayıcısı olduğunu gösteren değeridir. olarak ayarlanmadıysa ByPos FALSE, bir menü öğesi konumunu gösterir.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri sıfır değildir. İşlev başarısız olursa, dönüş değeri sıfır olur. Genişletilmiş hata bilgilerini almak için, Windows SDK'da açıklandığı gibi Win32 işlevini GetLastErrorkullanın.

Açıklamalar

Bu üye işlevi, Windows SDK'da açıklandığı gibi Win32 işlevinin GetMenuItemInfodavranışını uygular. MFC uygulamasında GetMenuItemInfobir menü için tanıtıcı kullanmadığınıza dikkat edin.

Örnek

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

Belirtilen menü öğesinin durumunu veya açılır menüdeki öğe sayısını döndürür.

UINT GetMenuState(
    UINT nID,
    UINT nFlags) const;

Parametreler

nID
tarafından nFlagsbelirlenen menü öğesi kimliğini belirtir.

nFlags
öğesinin doğasını nIDbelirtir. Aşağıdaki değerlerden biri olabilir:

  • MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu varsayılan seçenektir.

  • MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

Dönüş Değeri

Belirtilen öğe yoksa değer 0xFFFFFFFF . Bir açılır menü tanımlarsa nId , yüksek sıralı bayt açılır menüdeki öğelerin sayısını ve düşük sıralı bayt açılır menüyle ilişkilendirilmiş menü bayraklarını içerir. Aksi takdirde dönüş değeri, aşağıdaki listede yer alan değerlerin bir maskesidir (Boole VEYA) (bu maske, tanımlayan nId menü öğesinin durumunu açıklar):

  • MF_CHECKED Öğesinin yanına varsayılan onay işaretini yerleştirmek için iki durumlu MF_UNCHECKED düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevine SetMenuItemBitmaps bakın), "onay işareti açık" bit eşlem görüntülenir.

  • MF_DISABLED Menü öğesini devre dışı bırakır, böylece seçilemez ancak soluk olmaz.

  • MF_ENABLED Menü öğesinin seçilebilmesini sağlar ve soluk durumundan geri yükler. Bu sabitin değerinin 0 olduğuna dikkat edin; Bir uygulama, bu değeri kullanırken hata için 0'a karşı test etmemelidir.

  • MF_GRAYED Menü öğesini devre dışı bırakır, böylece seçilemez ve soluk görünür.

  • MF_MENUBARBREAK Öğeyi statik menülerde yeni bir satıra veya açılır menülerde yeni bir sütuna yerleştirir. Yeni açılır menü sütunu, eski sütundan dikey bir bölme çizgisiyle ayrılır.

  • MF_MENUBREAK Öğeyi statik menülerde yeni bir satıra veya açılır menülerde yeni bir sütuna yerleştirir. Sütunlar arasına bölme çizgisi yerleştirilmemiştir.

  • MF_SEPARATOR Yatay bir bölme çizgisi çizer. Yalnızca açılır menüde kullanılabilir. Bu satır soluk görüntülenemez, devre dışı bırakılamaz veya vurgulanamaz. Diğer parametreler yoksayılır.

  • MF_UNCHECKED Öğenin yanındaki onay işaretini kaldırmak için iki durumlu MF_CHECKED düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevine SetMenuItemBitmaps bakın), "onay işareti kapalı" bit eşlemi görüntülenir. Bu sabitin değerinin 0 olduğuna dikkat edin; Bir uygulama, bu değeri kullanırken hata için 0'a karşı test etmemelidir.

Örnek

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

Belirtilen menü öğesinin etiketini belirtilen arabelleğe kopyalar.

int GetMenuString(
    UINT nIDItem,
    LPTSTR lpString,
    int nMaxCount,
    UINT nFlags) const;

int GetMenuString(
    UINT nIDItem,
    CString& rString,
    UINT nFlags) const;

Parametreler

nIDItem
değerine bağlı olarak menü öğesinin tamsayı tanımlayıcısını veya menüdeki menü öğesinin uzaklığını nFlagsbelirtir.

lpString
Etiketi alacak arabelleğe işaret eden.

rString
Kopyalanan menü dizesini almak için bir nesneye başvuru CString .

nMaxCount
Kopyalanacak etiketin uzunluk üst sınırını (karakter cinsinden) belirtir. Etiket içinde nMaxCountbelirtilen en uzun değerden uzunsa, fazladan karakterler kesilir.

nFlags
parametresinin yorumlanmasını nIDItem belirtir. Aşağıdaki değerlerden biri olabilir:

nFlags Yorumlanması nIDItem
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

Dönüş Değeri

Boş sonlandırıcı dahil olmak üzere arabelleğe kopyalanan gerçek karakter sayısını belirtir.

Açıklamalar

Parametre, nMaxCount bir dizeyi sonlandıran null karaktere uyum sağlamak için etiketteki karakter sayısından büyük olmalıdır.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::GetSafeHmenu

HMENU Bu CMenu nesne veya işaretçi NULL CMenu tarafından sarmalanmış döndürür.

HMENU GetSafeHmenu() const;

Örnek

örneğine CMenu::LoadMenubakın.

CMenu::GetSubMenu

Açılır menünün CMenu nesnesini alır.

CMenu* GetSubMenu(int nPos) const;

Parametreler

nPos
Menüde yer alan açılır menünün konumunu belirtir. Konum değerleri ilk menü öğesi için 0'da başlar. Açılır menünün tanımlayıcısı bu işlevde kullanılamaz.

Dönüş Değeri

Verilen konumda bir CMenu açılır menü varsa, üyesi açılır menünün tutamacını içeren bir nesnenin m_hMenu işaretçisi; aksi takdirde NULL. Bir CMenu nesne yoksa, geçici bir nesne oluşturulur. Döndürülen CMenu işaretçi depolanmamalıdır.

Örnek

örneğine CMenu::TrackPopupMenubakın.

CMenu::InsertMenu

tarafından nPosition belirtilen konuma yeni bir menü öğesi ekler ve diğer öğeleri menüde aşağı taşır.

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

Parametreler

nPosition
Yeni menü öğesinin eklenecek menü öğesini belirtir. nFlags parametresi aşağıdaki yollarla yorumlamak nPosition için kullanılabilir:

nFlags Yorumlanması nPosition
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır. -1 ise nPosition , yeni menü öğesi menünün sonuna eklenir.

nFlags
Nasıl nPosition yorumleneceğini belirtir ve menüye eklendiğinde yeni menü öğesinin durumu hakkındaki bilgileri belirtir. Ayarlanabilecek bayrakların listesi için üye işlevine AppendMenu bakın. Birden fazla değer belirtmek için bit düzeyinde OR işlecini kullanarak bunları veya MF_BYPOSITION bayrağıyla birleştirinMF_BYCOMMAND.

nIDNewItem
Yeni menü öğesinin komut kimliğini veya olarak ayarlandıysa nFlags MF_POPUPaçılır menünün menü tutamacını (HMENU) belirtir. nIDNewItem parametresi olarak ayarlanırsa nFlags MF_SEPARATORparametresi yoksayılır (gerekli değildir).

lpszNewItem
Yeni menü öğesinin içeriğini belirtir. nFlags aşağıdaki yollarla yorumlamak lpszNewItem için kullanılabilir:

nFlags Yorumlanması lpszNewItem
MF_OWNERDRAW Uygulamanın menü öğesiyle ilişkili ek verileri korumak için kullanabileceği, uygulama tarafından sağlanan 32 bit değeri içerir. Bu 32 bit değer, ve WM_DRAWITEM iletileri tarafından sağlanan yapının üyesinde itemData uygulama tarafından WM_MEASUREITEM kullanılabilir. Bu iletiler, menü öğesi başlangıçta görüntülendiğinde veya değiştirildiğinde gönderilir.
MF_STRING Null olarak sonlandırılan bir dizeye uzun bir işaretçi içerir. Bu varsayılan yorumdur.
MF_SEPARATOR lpszNewItem parametresi yoksayılır (gerekli değildir).

pBmp
Menü öğesi olarak kullanılacak bir CBitmap nesneye işaret eder.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Uygulama, içindeki nFlagsdeğerleri ayarlayarak menü öğesinin durumunu belirtebilir.

Pencerede bulunan bir menü her değiştirildiğinde (pencere görüntülenip görüntülenmeyeceği), uygulamanın öğesini çağırması CWnd::DrawMenuBargerekir.

nIDNewItem Bir açılır menü belirttiğinde, eklendiği menünün bir parçası olur. Bu menü yok edilirse, eklenen menü de yok edilir. Çakışmayı önlemek için eklenen menü nesneden CMenu ayrılmalıdır.

Etkin birden çok belge arabirimi (MDI) alt penceresi ekranı kaplamışsa ve bir uygulama bu işlevi çağırarak ve bayrağı belirterek MDI uygulamasının MF_BYPOSITION menüsüne bir açılır menü eklerse, menü beklenenden daha uzak bir konuma eklenir. Bunun nedeni, etkin MDI alt penceresinin Denetim menüsünün MDI çerçeve penceresinin menü çubuğunun ilk konumuna eklenmesidir. Menüyü düzgün konumlandırmak için, uygulamanın aksi takdirde kullanılacak konum değerine 1 eklemesi gerekir. Bir uygulama, şu anda etkin olan alt pencerenin ekranı kaplayıp kaplamadığını belirlemek için iletiyi kullanabilir WM_MDIGETACTIVE .

Örnek

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

Bir menüde belirtilen konuma yeni bir menü öğesi ekler.

BOOL InsertMenuItem(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

Parametreler

uItem
Windows SDK'sının içindeki InsertMenuItem açıklamasına uItem bakın.

lpMenuItemInfo
Windows SDK'sının içindeki InsertMenuItem açıklamasına lpmii bakın.

fByPos
Windows SDK'sının içindeki InsertMenuItem açıklamasına fByPosition bakın.

Açıklamalar

Bu işlev, Windows SDK'sında açıklanan öğesini sarmalar InsertMenuItem.

CMenu::LoadMenu

Uygulamanın yürütülebilir dosyasından bir menü kaynağı yükler ve bunu nesneye CMenu ekler.

BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);

Parametreler

lpszResourceName
Yüklenecek menü kaynağının adını içeren null olarak sonlandırılan bir dizeyi gösterir.

nIDResource
Yüklenecek menü kaynağının menü kimliğini belirtir.

Dönüş Değeri

Menü kaynağı başarıyla yüklendiyse sıfır olmayan; aksi takdirde 0.

Açıklamalar

Çıkış öncesinde, menü bir pencereye atanmamışsa, uygulamanın menüyle ilişkili sistem kaynaklarını boşaltması gerekir. Bir uygulama üye işlevini çağırarak menüyü DestroyMenu serbesttir.

Örnek

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

Bellekteki bir menü şablonundan kaynağı yükler ve nesneye CMenu ekler.

BOOL LoadMenuIndirect(const void* lpMenuTemplate);

Parametreler

lpMenuTemplate
Bir menü şablonunu (tek MENUITEMTEMPLATEHEADER bir yapı ve bir veya daha fazla MENUITEMTEMPLATE yapıdan oluşan bir koleksiyon) gösterir. Bu iki yapı hakkında daha fazla bilgi için bkz. Windows SDK'sı.

Dönüş Değeri

Menü kaynağı başarıyla yüklendiyse sıfır olmayan; aksi takdirde 0.

Açıklamalar

Menü şablonu, bir veya daha fazla yapıdan oluşan ve her biri bir veya daha fazla MENUITEMTEMPLATE menü öğesi ve açılır menü içerebilen bir üst bilgidir.

Sürüm numarası 0 olmalıdır.

Bayraklar mtOption , bir açılır listedeki son öğeye ve ana listedeki son öğeye yönelik olmalıdır MF_END . AppendMenu Diğer bayraklar için üye işlevine bakın. mtId öğesinde mtOptionbelirtildiğinde MF_POPUP üyenin MENUITEMTEMPLATE yapısından atlanması gerekir.

Yapı için ayrılan alan, menü öğesinin MENUITEMTEMPLATE adını null olarak sonlandırılan bir dize olarak içerecek kadar mtString büyük olmalıdır.

Çıkış öncesinde, menü bir pencereye atanmamışsa, uygulamanın menüyle ilişkili sistem kaynaklarını boşaltması gerekir. Bir uygulama üye işlevini çağırarak menüyü DestroyMenu serbesttir.

Örnek

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

Nesneye HMENU bağlı Windows menüsünün tutamacını CMenu belirtir.

HMENU m_hMenu;

Örnek

örneğine CMenu::LoadMenubakın.

CMenu::MeasureItem

Sahip çizim stiline sahip bir menü oluşturulduğunda çerçeve tarafından çağrılır.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parametreler

lpMeasureItemStruct
Bir yapıya işaretçi MEASUREITEMSTRUCT .

Açıklamalar

Varsayılan olarak, bu üye işlevi hiçbir şey yapmaz. Bu üye işlevini geçersiz kılın ve Windows'u menünün MEASUREITEMSTRUCT boyutları hakkında bilgilendirmek için yapıyı doldurun.

Yapının açıklaması MEASUREITEMSTRUCT için bkzCWnd::OnMeasureItem.

Örnek

Aşağıdaki kod MFC CTRLTEST örneğinden alınmalıdır:

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

Varolan bir menü öğesini tarafından nPositionbelirtilen konumda değiştirir.

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

Parametreler

nPosition
Değiştirilecek menü öğesini belirtir. nFlags parametresi aşağıdaki yollarla yorumlamak nPosition için kullanılabilir:

nFlags Yorumlanması nPosition
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

nFlags
Nasıl nPosition yorumlanacaklarını belirtir ve menü öğesinde yapılacak değişiklikler hakkında bilgi verir. Ayarlanabilecek bayrakların listesi için üye işlevine AppendMenu bakın.

nIDNewItem
Değiştirilen menü öğesinin komut kimliğini veya olarak ayarlandıysa nFlags MF_POPUPaçılır menünün menü tutamacını (HMENU) belirtir. nIDNewItem parametresi olarak ayarlanırsa nFlags MF_SEPARATORparametresi yoksayılır (gerekli değildir).

lpszNewItem
Yeni menü öğesinin içeriğini belirtir. nFlags parametresi aşağıdaki yollarla yorumlamak lpszNewItem için kullanılabilir:

nFlags Yorumlanması lpszNewItem
MF_OWNERDRAW Uygulamanın menü öğesiyle ilişkili ek verileri korumak için kullanabileceği, uygulama tarafından sağlanan 32 bit değeri içerir. Bu 32 bit değer ve MF_DRAWITEMişlendiğinde MF_MEASUREITEM uygulamanın kullanımına sunulur.
MF_STRING Null olarak sonlandırılan bir dizeye veya öğesine uzun bir CStringişaretçi içerir.
MF_SEPARATOR lpszNewItem parametresi yoksayılır (gerekli değildir).

pBmp
Menü öğesi olarak kullanılacak bir CBitmap nesneye işaret eder.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Uygulama, içindeki değerleri nFlagsayarlayarak menü öğesinin yeni durumunu belirtir. Bu işlev, menü öğesiyle ilişkilendirilmiş bir açılır menünün yerini alırsa, eski açılır menüyü yok eder ve açılır menü tarafından kullanılan belleği serbest bırakır.

nIDNewItem Bir açılır menü belirttiğinde, eklendiği menünün bir parçası olur. Bu menü yok edilirse, eklenen menü de yok edilir. Çakışmayı önlemek için eklenen menü nesneden CMenu ayrılmalıdır.

Pencerede bulunan bir menü her değiştirildiğinde (pencere görüntülenip görüntülenmeyeceği), uygulamanın öğesini çağırması CWnd::DrawMenuBargerekir. Mevcut menü öğelerinin özniteliklerini değiştirmek için ve EnableMenuItem üye işlevlerini kullanmak CheckMenuItem çok daha hızlıdır.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::operator HMENU

Nesnenin tutamacını CMenu almak için bu işleci kullanın.

operator HMENU() const;

Dönüş Değeri

Başarılı olursa, nesnesinin CMenu tanıtıcısı; aksi takdirde , NULL.

Açıklamalar

Windows API'lerini doğrudan çağırmak için tutamacı kullanabilirsiniz.

CMenu::operator !=

İki menünün mantıksal olarak eşit olup olmadığını belirler.

BOOL operator!=(const CMenu& menu) const;

Parametreler

menu
CMenu Karşılaştırma için bir nesne.

Açıklamalar

Sol taraftaki bir menü nesnesinin sağ taraftaki bir menü nesnesine eşit olup olmadığını sınar.

CMenu::operator ==

İki menünün mantıksal olarak eşit olup olmadığını belirler.

BOOL operator==(const CMenu& menu) const;

Parametreler

menu
CMenu Karşılaştırma için bir nesne.

Açıklamalar

Sol taraftaki bir menü nesnesinin sağ taraftaki bir menü nesnesine eşit olup olmadığını (değer açısından HMENU ) sınar.

CMenu::RemoveMenu

menüden ilişkili bir açılır menü içeren menü öğesini siler.

BOOL RemoveMenu(
    UINT nPosition,
    UINT nFlags);

Parametreler

nPosition
Kaldırılacak menü öğesini belirtir. nFlags parametresi aşağıdaki yollarla yorumlamak nPosition için kullanılabilir:

nFlags Yorumlanması nPosition
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

nFlags
Nasıl nPosition yorumlanır belirtir.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Açılır menünün tutamacını yok etmez, bu nedenle menü yeniden kullanılabilir. Bu işlevi çağırmadan önce uygulama, yeniden kullanmak üzere açılır CMenu nesneyi almak üzere üye işlevini çağırabilirGetSubMenu.

Pencerede bulunan bir menü her değiştirildiğinde (pencerenin görüntülenip görüntülenmeyeceği), uygulamanın öğesini çağırması CWnd::DrawMenuBargerekir.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::SetDefaultItem

Belirtilen menü için varsayılan menü öğesini ayarlar.

BOOL SetDefaultItem(
    UINT uItem,
    BOOL fByPos = FALSE);

Parametreler

uItem
Yeni varsayılan menü öğesinin tanımlayıcısı veya konumu veya varsayılan öğe olmadan - 1. Bu parametrenin anlamı değerine fByPosbağlıdır.

fByPos
değerinin anlamını belirten değer uItem. Bu parametre iseFALSEuItem, bir menü öğesi tanımlayıcısıdır. Aksi takdirde, bu bir menü öğesi konumudur.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri sıfır değildir. İşlev başarısız olursa, dönüş değeri sıfır olur. Genişletilmiş hata bilgilerini almak için, Windows SDK'da açıklandığı gibi Win32 işlevini GetLastErrorkullanın.

Açıklamalar

Bu üye işlevi, Windows SDK'da açıklandığı gibi Win32 işlevinin SetMenuDefaultItemdavranışını uygular.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::SetMenuContextHelpId

Bağlam yardım kimliğini ile CMenuilişkilendirir.

BOOL SetMenuContextHelpId(DWORD dwContextHelpId);

Parametreler

dwContextHelpId
ile CMenuilişkilendirilecek bağlam yardımı kimliği.

Dönüş Değeri

Başarılı olursa sıfır olmayan; aksi takdirde 0

Açıklamalar

Menüdeki tüm öğeler bu tanımlayıcıyı paylaşır; tek tek menü öğelerine bir yardım bağlamı tanımlayıcısı eklemek mümkün değildir.

Örnek

örneğine CMenu::InsertMenubakın.

CMenu::SetMenuInfo

Bir menünün bilgilerini ayarlar.

BOOL SetMenuInfo(LPCMENUINFO lpcmi);

Parametreler

lpcmi
Menüye ilişkin bilgileri içeren bir MENUINFO yapıya yönelik işaretçi.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri sıfır değildir; aksi takdirde, dönüş değeri sıfırdır.

Açıklamalar

Menü hakkında belirli bilgileri ayarlamak için bu işlevi çağırın.

CMenu::SetMenuItemBitmaps

Belirtilen bit eşlemleri bir menü öğesiyle ilişkilendirir.

BOOL SetMenuItemBitmaps(
    UINT nPosition,
    UINT nFlags,
    const CBitmap* pBmpUnchecked,
    const CBitmap* pBmpChecked);

Parametreler

nPosition
Değiştirilecek menü öğesini belirtir. nFlags parametresi aşağıdaki yollarla yorumlamak nPosition için kullanılabilir:

nFlags nPosition'ın yorumu
MF_BYCOMMAND parametresinin mevcut menü öğesinin komut kimliğini verdiğini belirtir. Bu, ayarlı MF_BYCOMMAND değilse veya MF_BYPOSITION ayarlanmadıysa varsayılan değerdir.
MF_BYPOSITION parametresinin mevcut menü öğesinin konumunu verdiğini belirtir. İlk öğe 0 konumundadır.

nFlags
Nasıl nPosition yorumlanır belirtir.

pBmpUnchecked
İşaretlenmeyen menü öğeleri için kullanılacak bit eşlemi belirtir.

pBmpChecked
denetlenen menü öğeleri için kullanılacak bit eşlemi belirtir.

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Menü öğesinin işaretli veya işaretsiz olmasına bakılmaksızın, Windows menü öğesinin yanında uygun bit eşlemi görüntüler.

pBmpUnchecked veya pBmpChecked iseNULL, Windows ilgili öznitelik için menü öğesinin yanında hiçbir şey görüntülemez. Her iki parametre de ise NULL, Windows öğe işaretlendiğinde varsayılan onay işaretini kullanır ve öğe işaretsiz olduğunda onay işaretini kaldırır.

Menü yok edildiğinde, bu bit eşlemler yok olmaz; uygulamanın bunları yok etmesi gerekir.

Windows GetMenuCheckMarkDimensions işlevi, menü öğeleri için kullanılan varsayılan onay işaretinin boyutlarını alır. Uygulama, bu işlevle birlikte sağlanan bit eşlemler için uygun boyutu belirlemek için bu değerleri kullanır. Boyutu alın, bit eşlemlerinizi oluşturun ve ardından ayarlayın.

Örnek

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

Menü öğesi hakkındaki bilgileri değiştirir.

BOOL SetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

Parametreler

uItem
Windows SDK'sının içindeki SetMenuItemInfo açıklamasına uItem bakın.

lpMenuItemInfo
Windows SDK'sının içindeki SetMenuItemInfo açıklamasına lpmii bakın.

fByPos
Windows SDK'sının içindeki SetMenuItemInfo açıklamasına fByPosition bakın.

Açıklamalar

Bu işlev, Windows SDK'sında açıklanan öğesini sarmalar SetMenuItemInfo.

CMenu::TrackPopupMenu

Belirtilen konumda kayan bir açılır menü görüntüler ve açılır menüdeki öğelerin seçimini izler.

BOOL TrackPopupMenu(
    UINT nFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPCRECT lpRect = 0);

Parametreler

nFlags
Ekran konumunu ve fare konumu bayraklarını belirtir. Kullanılabilir bayrakların listesi için bkz TrackPopupMenu .

x
Açılır menünün ekran koordinatlarında yatay konumu belirtir. Parametrenin değerine nFlags bağlı olarak menü sola hizalanabilir, sağa hizalanabilir veya bu konuma göre ortalanabilir.

y
Ekranın üst kısmındaki ekranın koordinatlarında dikey konumu belirtir.

pWnd
Açılır menünün sahibi olan pencereyi tanımlar. Bayrak belirtilse TPM_NONOTIFY bile bu parametre olamazNULL. Bu pencere, menüden tüm WM_COMMAND iletileri alır. Windows 3.1 ve sonraki sürümlerinde, pencere dönene kadar TrackPopupMenu ileti almazWM_COMMAND. Windows 3.0'da, pencere döndürülmeden önce TrackPopupMenu iletileri alırWM_COMMAND.

lpRect
Göz ardı.

Dönüş Değeri

Bu yöntem, Windows SDK'sında çağrının TrackPopupMenu sonucunu döndürür.

Açıklamalar

Ekranda herhangi bir yerde kayan bir açılır menü görüntülenebilir.

Örnek

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

Belirtilen konumda kayan bir açılır menü görüntüler ve açılır menüdeki öğelerin seçimini izler.

BOOL TrackPopupMenuEx(
    UINT fuFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPTPMPARAMS lptpm);

Parametreler

fuFlags
Genişletilmiş menü için çeşitli işlevleri belirtir. Tüm değerlerin ve anlamlarının listesi için bkz TrackPopupMenuEx. .

x
Açılır menünün ekran koordinatlarında yatay konumu belirtir.

y
Ekranın üst kısmındaki ekranın koordinatlarında dikey konumu belirtir.

pWnd
Açılan menüye sahip olan ve oluşturulan menüden iletileri alan pencere işaretçisi. Bu pencere geçerli uygulamadan herhangi bir pencere olabilir ancak olamaz NULL. parametresinde fuFlags belirtirsenizTPM_NONOTIFY, işlevi öğesine pWndileti göndermez. İşlevin, iletiyi almak WM_COMMAND için tarafından işaret edilen pWnd pencere için döndürülmesi gerekir.

lptpm
Ekranın bir alanını belirten bir TPMPARAMS yapı işaretçisi, menü çakışmamalıdır. Bu parametre olabilir NULL.

Dönüş Değeri

parametresinde fuFlags belirtirsenizTPM_RETURNCMD, dönüş değeri kullanıcının seçtiği öğenin menü öğesi tanımlayıcısı olur. Kullanıcı seçim yapmadan menüyü iptal ederse veya bir hata oluşursa, dönüş değeri 0 olur.

parametresinde fuFlags belirtmezsenizTPM_RETURNCMD, işlev başarılı olursa dönüş değeri sıfır değildir ve başarısız olursa 0 olur. Genişletilmiş hata bilgilerini almak için çağrısında bulunur GetLastError.

Açıklamalar

Ekranda herhangi bir yerde kayan bir açılır menü görüntülenebilir. Açılır menü oluşturulurken oluşan hataları işleme hakkında daha fazla bilgi için bkz TrackPopupMenuEx. .

Ayrıca bkz.

MFC Örneği CTRLTEST
MFC Örneği DYNAMENU
CObject Sınıf
Hiyerarşi Grafiği