MFC动态添加菜单选项

// 加载指定菜单

CMenu menu;

menu.LoadMenuA(ID_MENU);

 

// 获取菜单栏下的第一个菜单

pSubMenu = menu.GetSubMenu(0)

 

pSubMenu->AppendMenuA(MF_STRING, ITEM_ID, "菜单选项1");  // 动态添加菜单选项

pSubMenu->ModifyMenuA(0, MF_STRING, ITEM_ID, "修改菜单文本");  // 修改指定菜单选项文本内容

 

MF_BITMAP:将一个位图用作菜单项。参数lpNewltem里含有该位图的句柄。

MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记,位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。

MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。

MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。

MF_GRAYED:使菜单项无效并变灰,使其不能被选择。

MF_MENUBARBREAK:对菜单条的功能同MF_MENUBREAK标志。对下拉式菜单、子菜单或快捷菜单,新列和旧列被垂直线分开。

MF_MENUBREAK:将菜单项放置于新行(对菜单条),或新列(对下拉式菜单、子菜单或快捷菜单)且无分割列。

MF_OWNERDRAW:指定该菜单项为自绘制菜单项。菜单第一次显示前,拥有菜单的窗口接收一个WM_MEASUREITEM消息来得到菜单项的宽和高。然后,只要菜单项被修改,都将发送WM_DRAWITEM

消息给菜单拥有者的窗口程序。

MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。参数uIDNewltem下拉式菜单或子菜单的句柄。此标志用来给菜单条、打开一个下拉式菜单或于菜单的菜单项、子菜单或快捷菜单

加一个名字。

MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、子菜单或快捷菜单使用。此区分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。

MF_STRING:指定菜单项是一个正文字符串;参数lpNewltem指向该字符串。

MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。如果应用程序提供一个选取标记位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。

不能一起使用的标志组

MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING和MF_OWNERDRAW

MF_MENUBARBREAK和MF_MENUBREAK;MF_CHECKED和MF_UNCHECKED

 

// 在鼠标点击位置弹出菜单

CPoint point;

GetCursorPos(&point);

pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, this);

pSubMenu->DestroyMenu();

menu.DestroyMenu();

 

// 给动态添加的菜单选项添加消息响应(类向导添加虚函数OnCommand)

BOOL MyWnd::OnCommand(WPARAM wParam, LPARAM lParam)

{

  UINT uMsg = LOWORD(wParam);

  if(uMsg == ITEM_ID)

  {

    // do something

  }

}

posted on 2021-04-30 17:03  Cynthia_W  阅读(1103)  评论(0编辑  收藏  举报