CMenu::InsertMenu

BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );

返回值:如果成功,则返回非零值,否则为0。

参数:
nPosition指定将要插入的新菜单项前的菜单项。参数nFlags被用于以下列方式解释nPosition:
nflagsnPosition的解释
MF_BYCOMMAND指定参数给出已存在菜单项的命令ID号。如果没有设置MF_BYCOMMAND或MF_BYPOSITION,那么此为缺省值
MF_BYPOSITION指定参数给出已存在菜单项的位置。第一项位于位置0。如果nPosition为-1,那么新菜单项将添加到菜单尾

nFlags指定nPosition值如何被解释,并指定要增加到菜单中新菜单项的状态。对于能够被设置的标志,请参阅成员函数AppendMenu。如果需要指定多个值,需使用位与操作来组合MF_BYCOMMAND或MF_BYPOSITION标志。
nIDNewItem指定新菜单项的命令ID号,或者,若nFlags被设置为MF_POPUP,则指定为弹出菜单的菜单句柄(HMENU)。若nFlags被设置为MF_SEPARATOR,那么参数nIDNewItem将被忽略。
lpszNewItem指定新菜单项的文本。nFlags被用于以下列方式解释lpszNewItem:
nflagslpszNewltem的解释
MF_OWNERDRAW该值含有应用用于包含菜单项附加数据应用提供的32位值。该32位值在由WM_MEASUREITEM和WM_DRAWITEM消息提供的itemData结构成员里对于应用有效。这些消息的发送是在菜单项最初显示或更改时发生
MF_STRING包含指向以空格位终止符的字符串指针。它为缺省解释
MF_SEPARATOR参数lpszNewltem将被忽略

pBmp指向将作为菜单项使用的CBitmap 对象。

说明:
在nPosition指定位置插入新的菜单项,并依次下移其它项。应用可以通过设置nFlags的值,来指定菜单项的状态。
无论何时,当停留在窗口的菜单发生改变时(不管窗口是否显示),应用都将调用CWnd::DrawMenuBar函数。
当nIDNewItem指定一个弹出菜单,则它将成为被插入菜单的一部分。若菜单被销毁,那么插入的菜单也将要被销毁。插入的菜单应当从CMenu 对象中分离出来,以避免冲突。
如果活动的多文档界面(MDI)子窗口为最大化,同时应通过调用该函数,将弹出菜单插入到MDI应用的菜单中,并指定了MF_BYPOSITION标志,那么插入的菜单将位于期待位置的左边。其原因在于活动的MDI子窗口控件菜单被插入到MDI框架窗口菜单条的第一个位置。为了正确地放置菜单,应用必须将位置值增加1。应用可以使用WM_MDIGETACTIVE消息来决定当前活动的子窗口是否为最大化。

请参阅:
CMenu::AppendMenu, CWnd::DrawMenuBar, CMenu::SetMenuItemBitmaps, CMenu::Detach, ::InsertMenu