CMenu
Sınıf
Windows HMENU
kapsü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
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_POPUP
açılır menünün menü tutamacını (HMENU
) belirtir. nIDNewItem
parametresi olarak ayarlanırsa nFlags
MF_SEPARATOR
parametresi 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 nFlags
değ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ü AppendMenu
için geçerli olmadığını unutmayın.
Aşağıdaki listede, içinde nFlags
ayarlanabilecek bayraklar açıklanmaktadır:
MF_CHECKED
Öğesinin yanına varsayılan onay işaretini yerleştirmek için iki durumluMF_UNCHECKED
düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevineSetMenuItemBitmaps
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 durumluMF_CHECKED
düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevineSetMenuItemBitmaps
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 birWM_MEASUREITEM
ileti alır. İletiWM_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_ENABLED
veMF_GRAYED
MF_STRING
,MF_OWNERDRAW
,MF_SEPARATOR
ve bit eşlem sürümüMF_MENUBARBREAK
veMF_MENUBREAK
MF_CHECKED
veMF_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::DrawMenuBar
gerekir.
Örnek
örneğine CMenu::CreateMenu
bakı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 nCheck
belirlendiğ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 durumluMF_UNCHECKED
düğme işlevi görür.MF_UNCHECKED
Öğenin yanındaki onay işaretini kaldırmak için iki durumluMF_CHECKED
düğme işlevi görür.
Dönüş Değeri
Öğenin önceki durumu: MF_CHECKED
veya MF_UNCHECKED
veya 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::GetMenuState
bakı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 nFlags
bağlı olarak kimlik veya uzaklık olarak).
nIDLast
Radyo düğmesi grubundaki son menü öğesini belirtir (değerine nFlags
bağlı olarak kimlik veya uzaklık olarak).
nIDItem
Gruptaki bir radyo düğmesiyle denetlenecek öğeyi (değerine nFlags
bağlı olarak kimlik veya uzaklık olarak) belirtir.
nFlags
, nIDLast
ve nIDItem
yorumlarını nIDFirst
aş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_RANGE
bakı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 CMenu
birini ç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::CreateMenu
bakın.
CMenu::DeleteMenu
Menüden bir öğeyi siler.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parametreler
nPosition
tarafından nFlags
belirlendiğ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::DrawMenuBar
gerekir.
Örnek
örneğine CWnd::GetMenu
bakı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
DeleteTempMap
nesneyi 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::CreateMenu
bakı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 HMENU
tanıtıcı; aksi takdirde NULL
.
Açıklamalar
Veri m_hMenu
üyesi olarak NULL
ayarlanı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 nEnable
belirlendiğ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_ENABLED
veya MF_GRAYED
birleş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
, ModifyMenu
ve 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 CMenu
değ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::CreateMenu
bakı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 GetMenuDefaultItem
davranışını uygular.
Örnek
örneğine CMenu::InsertMenu
bakın.
CMenu::GetMenuContextHelpId
ile CMenu
iliş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::InsertMenu
bakı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::GetMenu
bakın.
CMenu::GetMenuItemID
tarafından nPos
tanı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::InsertMenu
bakı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 ByPos
bağlıdır.
lpMenuItemInfo
Windows SDK'da açıklandığı gibi, menü hakkında bilgi içeren bir MENUITEMINFO
işaretçi.
fByPos
değerinin anlamını belirten değer nIDItem
. Varsayılan olarak, ByPos
FALSE
uItem öğ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 GetLastError
kullanın.
Açıklamalar
Bu üye işlevi, Windows SDK'da açıklandığı gibi Win32 işlevinin GetMenuItemInfo
davranışını uygular. MFC uygulamasında GetMenuItemInfo
bir 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 nFlags
belirlenen menü öğesi kimliğini belirtir.
nFlags
öğesinin doğasını nID
belirtir. 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 durumluMF_UNCHECKED
düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevineSetMenuItemBitmaps
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 durumluMF_CHECKED
düğme işlevi görür. Uygulama onay işareti bit eşlemleri sağladığında (üye işlevineSetMenuItemBitmaps
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ı nFlags
belirtir.
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 nMaxCount
belirtilen 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::InsertMenu
bakı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::LoadMenu
bakı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::TrackPopupMenu
bakı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_POPUP
açılır menünün menü tutamacını (HMENU
) belirtir. nIDNewItem
parametresi olarak ayarlanırsa nFlags
MF_SEPARATOR
parametresi 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 nFlags
değ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::DrawMenuBar
gerekir.
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 mtOption
belirtildiğ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::LoadMenu
bakı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 nPosition
belirtilen 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_POPUP
açılır menünün menü tutamacını (HMENU
) belirtir. nIDNewItem
parametresi olarak ayarlanırsa nFlags
MF_SEPARATOR
parametresi 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_DRAWITEM işlendiğinde MF_MEASUREITEM uygulamanın kullanımına sunulur. |
MF_STRING |
Null olarak sonlandırılan bir dizeye veya öğesine uzun bir CString iş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 nFlags
ayarlayarak 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::DrawMenuBar
gerekir. 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::InsertMenu
bakı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::DrawMenuBar
gerekir.
Örnek
örneğine CMenu::InsertMenu
bakı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 fByPos
bağlıdır.
fByPos
değerinin anlamını belirten değer uItem
. Bu parametre iseFALSE
uItem
, 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 GetLastError
kullanın.
Açıklamalar
Bu üye işlevi, Windows SDK'da açıklandığı gibi Win32 işlevinin SetMenuDefaultItem
davranışını uygular.
Örnek
örneğine CMenu::InsertMenu
bakın.
CMenu::SetMenuContextHelpId
Bağlam yardım kimliğini ile CMenu
ilişkilendirir.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parametreler
dwContextHelpId
ile CMenu
iliş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::InsertMenu
bakı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 pWnd
ileti 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