CMenu::AppendMenu

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

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

参数:
nFlags指定了增加到菜单中的新菜单项状态的有关信息。它包括说明中列出的一个或多个值。
nIDNewItem指定了新菜单项的命令ID号,或如果nFlags被设置为MF_POPUP,该参数指定弹出菜单的菜单句柄(HMENU)。如果nFlags被设置为MF_SEPARA-TOR,那么参数NewItem将被忽略。
lpszNewItemlpszNewItem指定了新菜单项的内容。参数nFlags以下列方式解释lpszNewItem:
nFlagslpszNewItem的解释
MF_OWNERDRAW包含一个应用支持的32 位值,应用可以用于维护与菜单项关联的附加数据。当应用进行了WM_MEASUREITEM和WM_DRAWITEM,该32位值有效。这些信息存储在提供这些消息的结构的itemData成员中
MF_STRING包含一个指向以空字符终止的字符串的指针。这是它的缺省说明
MF_SEPARATOR参数lpszNewItem被忽略
pBmp指向将用作菜单项的CBitmap对象。

说明:
在菜单的末尾添加新项。该应用可以通过设置nFlags的值来指定菜单项的状态。若nIDNewItem指定一个弹出菜单,那么它也将成为被添加菜单的一部分。假如菜单被销毁,那么添加的菜单也将被销毁。添加的菜单应当从CMenu 对象中分离出来,以避免产生冲突。要注意MF_STRING和MF_OWNERDRAW对于AppendMenu函数的位图版本无效。

下面列出的是nFlags可以设置的值:
·MF_CHECKED该值的行为如同使用MF_UNCHECKED来作为一个标记,用于替换项前的检测标记。若应用支持检测标记位图(请参阅SetMenuItemBitmaps成员函数),那么将显示“检测标记打开”位图。
·MF_UNCHECKED该值的行为如同使用MF_CHECKED来作为一个标记,用于删除项前的检测标记。若应用支持检测标记位图(请参阅SetMenuItemBitmaps成员函数),那么将显示“检测标记关闭”位图。
·MF_DISABLED使菜单项无效以便它不能被选择,但菜单项不变灰。
·MF_ENABLED使菜单项有效以便它能够被选择,并从灰色状态中恢复原样。
·MF_GRAYED使菜单项无效以便它不能被选择,同时使菜单项变灰。
·MF_MENUBARBREAK在静态菜单里的新行中或弹出菜单的新列中放置菜单项。新的弹出菜单列与老的菜单列将由垂直分割线分开。
·MF_MENUBREAK在静态菜单里的新行中或弹出菜单的新列中放置菜单项。列与列之间没有分割线。
·MF_OWNERDRAW指定菜单项为一个拥有者描绘的项。当菜单首次显示时,拥有该菜单的窗口将接收WM_MEASUREITEM消息,以获取菜单项的高度与宽度。WM_DRAWITEM消息将使属主窗口必须更新菜单项的可视界面。该选择项对于顶层菜单项无效。
·MF_POPUP指定菜单项有与之相关联的弹出菜单。参数ID指定了与项相关联的弹出菜单的句柄。它用于增加顶层弹出菜单项或用于增加弹出菜单项的下一级弹出菜单。
·MF_SEPARATOR绘制一条水平的分割线。它仅仅能用于弹出菜单项。该线不能变灰、无效或高亮度显示。其它的参数将被忽略。
·MF_STRING指定菜单项为一个字符串。

下面列出的各组标志互相排斥,不能一起使用:
·MF_DISABLED, MF_ENABLED,和 MF_GRAYED
·MF_STRING, MF_OWNERDRAW, MF_SEPARATOR和位图版本。
·MF_MENUBARBREAK和MF_MENUBREAK
·MF_CHECKED 和MF_UNCHECKED
无论何时,当停留在窗口中的菜单发生变化时(不论窗口是否显示),应用都将调用CWnd::DrawMenuBar函数。

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