CMFCMenuButton的菜单如何响应?

woodicky 2011-01-04 06:05:19
//CMFCMenuButton CMyDlg::m_btn;

BOOL CMyDlg::OnInitDialog()
{
。。。。
CMenu* menu=new CMenu;
if(!menu->LoadMenu(IDR_MENU1))
return FALSE;

m_btn.m_hMenu = menu->GetSubMenu(0)->GetSafeHmenu();

}

可以正常显示下拉菜单,但是
ON_COMMAND_RANGE(ID_TESTMUNE_32771,ID_TESTMUNE_32773,&CMyDlg::OnSelectMenu)

无响应。

另外重写的一个button,右键弹出菜单,

void CMyMenuButton::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu *menu =new CMenu();
menu->LoadMenu(IDR_MENU1);
CRect rect;
GetWindowRect(&rect);
menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, rect.right,rect.bottom, this);

}
使用ON_COMMAND_RANGE(ID_TESTMUNE_32771,ID_TESTMUNE_32773,&CMyDlg::OnSelectMenu)可以响应。

CMFCMenuButton 有什么特殊的地方我没有注意到么?
...全文
420 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2011-01-06
  • 打赏
  • 举报
回复
m_menu.LoadMenu(IDR_MENU1);
m_btnMenu.m_hMenu = m_menu.GetSubMenu(0)->GetSafeHmenu();
m_btnMenu.SizeToContent();
m_btnMenu.m_bOSMenu = FALSE;
element_cn 2011-01-06
  • 打赏
  • 举报
回复
你在初始化的时候进行菜单创建,需要指定菜单的父指针,否则无法传递消息
Eleven 2011-01-06
  • 打赏
  • 举报
回复
你直接响应你的CMFCMenuButton按钮的BN_CLICKED点击事件即可
ON_BN_CLICKED(IDC_BUTTON_MENU, OnSelectMenu)

void CXXXDlg::OnSelectMenu()
{
CString strItem;

switch (m_btnMenu.m_nMenuResult)
{
case ID_ITEM_1:
strItem = _T("Item 1");
break;

case ID_ITEM_2:
strItem = _T("Item 2");
break;

case ID_ITEM_3:
strItem = _T("Item 3");
break;

case ID_ITEM_4:
strItem = _T("Item 4");
break;

default:
if (!m_bMenuDefaultClick)
{
return;
}

strItem = _T("Default Menu Button Action");
break;
}

AfxMessageBox(strItem);
}
VC天下 2011-01-06
  • 打赏
  • 举报
回复
没什么区别,你试试也加上这句menu->TrackPopupMenu(。。。)
caozoe 2011-01-06
  • 打赏
  • 举报
回复
又学会了一招。
woodicky 2011-01-06
  • 打赏
  • 举报
回复
VisualEleven 正解。
我开始的时候把menu的ID设置错了。导致后来的m_nMenuResult都是错误的。
关键 :m_btnMenu.m_bOSMenu = FALSE;
ON_BN_CLICKED(IDC_BUTTON_MENU, OnSelectMenu)中检测 m_btnMenu.m_nMenuResult

之前我int m_ID = pMenu->GetMenuItemID(i);
pMenu->ModifyMenui,MF_BYPOSITION|MF_OWNERDRAW|MF_STRING,
m_ID,(LPCTSTR)(&m_Menus[m_Index])没有用正确的ID。导致后来的错误。
awain 2011-01-05
  • 打赏
  • 举报
回复
这种方法也没用过,进来等高手,学习学习
caozoe 2011-01-05
  • 打赏
  • 举报
回复
关注中,有没有人解答?
lyingbo 2011-01-04
  • 打赏
  • 举报
回复
ON_COMMAND_RANGE(ID_TESTMUNE_32771,ID_TESTMUNE_32773,&CMyDlg::OnSelectMenu)

可能跟MFC的消息传递机制有关吧
sxqinge 2011-01-04
  • 打赏
  • 举报
回复
弱弱的问句,为什么不直接响应鼠标右键消息,在消息函数里写入菜单的代码呢?
你的这种方式我没有试过,先学习了,呵呵

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧