CMenu::InsertMenu
Tarafından belirtilen konumda yeni bir menü öğesi ekler nPosition ve diğer öğeler menü 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
Önce yeni menü öğesi eklenecek olan menü öğesini belirtir. nFlags Parametresi yorumlamak için kullanılabilir nPosition şu şekilde:nFlags
NPosition yorumu
MF_BYCOMMAND
Parametre komut kimliği varolan menü öğesinin verir belirtir. Bu varsayılan ne olur mf_bycommand , ne de MF_BYPOSITION olarak ayarlanır.
MF_BYPOSITION
Parametre varolan menü öğesinin konumunu verir belirtir. İlk öğe 0 konumunda değil. nPosition , –1 İse yeni menü öğesi menü sonuna eklenir.
nFlags
Belirtir nasıl nPosition yorumlanır ve menüsüne eklendiğinde, yeni menü öğesinin durumu ile ilgili bilgileri belirtir. Ayarlanabilir bayrakların bir listesi için bkz: tanıtıcısı üye işlevi. Birden fazla değer belirtmek için kendileri ile birleştirmek için Bitsel or işlecini kullanın mf_bycommand veya MF_BYPOSITION bayrağı.nIDNewItem
Yeni menü öğesi ya da komut Kimliğini belirtir ya da, eğer nFlags ayarlamak mf_popup, menü işleci (HMENU) açılır menüsünden. nIDNewItem Parametre yoksayılır (gerekli değil), nFlags ayarlamak mf_separator.lpszNewItem
Yeni menü öğesi içeriğini belirtir. nFlagsyorumlamak için kullanılan lpszNewItem şu şekilde:nFlags
LpszNewItem yorumu
MF_OWNERDRAW
Uygulamanın menü öğesiyle ilişkili ek verileri korumak için kullanabileceğiniz bir uygulama tarafından sağlanan 32-bit değeri içerir. Bu 32-bit değeri uygulamada kullanılabilir ItemData tarafından sağlanan yapı üyesi WM_MEASUREITEM ve WM_DRAWITEM iletileri. Menü öğesinin başlangıçta görüntülenen veya değiştirildiğinde, bu iletiler gönderilir.
MF_STRING
Uzun bir işaretçi boş sonlandırılmış bir dize içerir. Varsayılan yorumu budur.
MF_SEPARATOR
lpszNewItem (Gerekli) parametre yoksayılır.
pBmp
İşaret eden bir CBitmap menü öğesi kullanılan nesne.
Dönüş Değeri
Sıfır olmayan bir değer işlevi başarılı olursa; Aksi halde 0.
Notlar
Uygulama değerleri ayarlayarak menü öğesinin durumunu belirtmek nFlags.
Bir menü, bulunan her bir pencere (penceresinin görüntülenip görüntülenmeyeceğini) değiştirildi, uygulama çağırmalıdır CWnd::DrawMenuBar.
Zaman nIDNewItem bir açılır menü belirtir, onu eklenen menü bir parçası haline gelir. Bu menü yok, eklenen menü de yok edilir. Eklenen bir menü den ayrılır bir CMenu çakışmayı önlemek için nesne.
Birden çok belge arabirim (MDI) alt penceresi ekranı etkin ve uygulama ekliyorsa açılır menüsünü MDI uygulamanın menü bu işlevinin çağrılması ve belirterek MF_BYPOSITION tanýmlayýcýsýnýn, menü beklenenden daha uzağa sol bir konuma eklenir. Etkin MDI alt penceresinin denetim menüsünü MDI çerçevesi pencerenin menü çubuğunu ilk pozisyon eklenmiş olduğundan bu durum oluur. Menü düzgün şekilde konumlandırmak için uygulama, aksi takdirde kullanılacak konum değerini 1 eklemeniz gerekir. Bir uygulamanın kullanabileceği WM_MDIGETACTIVE şu anda etkin alt pencere ekranı olup olmadığını belirlemek için ileti.
Ö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;
}
Gereksinimler
Başlık: afxwin.h