关于下拉菜单的问题

yuemin_mcl 2008-04-10 06:49:45
代码如下:
void CDialogThreadDlg::OnBmenu()
{
// TODO: Add your control notification handler code here
CRect rect;
m_BMenu.GetWindowRect(&rect);

CMenu BMenu;

BMenu.CreateMenu();

BMenu.AppendMenu(MF_STRING,IDM_ABOUT,"关于");
BMenu.AppendMenu(MF_STRING,IDCANCEL,"退出");

BMenu.TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.bottom,this);

}
我使用一个按钮响应函数,然后来实现一个下拉菜单
但是菜单只能显示一个竖边,请问这是怎么回事哦
...全文
97 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackey_option 2008-05-11
  • 打赏
  • 举报
回复
void CDialogThreadDlg::OnBmenu()
{
// TODO: Add your control notification handler code here
CRect rect;
m_BMenu.GetWindowRect(&rect);

CMenu BMenu;

BMenu.CreateMenu();

BMenu.AppendMenu(MF_STRING,IDM_ABOUT,"关于");
BMenu.AppendMenu(MF_STRING,IDCANCEL,"退出");

///修改的地方如下:
CMenu* pMenu=BMenu.GetSubMenu(0);
pMenu->TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.bottom,this);

//BMenu.TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.bottom,this);

}

这样就可以显示了的,没有问题的。
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
不知,帮顶
jackey_option 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyongjun7322 的回复:]
楼上的对极了,应该用GetSubMenu成员函数获得CMenu对象后,该对象才可以用TrackPopupMenu方法显示,生成上下文菜单
[/Quote]

TrackPopupMenu事实上也可以显示,但显示出来的会有些问题.

如果LZ想要右击的快捷菜单,则也可以通过对WM_CONTEXTMENU消息处理
void CMyPro18View::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu menu;
menu.LoadMenu(IDR_MENU1);//IDR_MENU1自己添加的要用于显示的菜单
CMenu*pmenu=menu.GetSubMenu(0);
pmenu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_RIGHTALIGN,point.x,point.y,this);
menu.DestroyMenu();
///原理很相似,这个方法稍微简单些
}
jackey_option 2008-04-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuemin_mcl 的帖子:]
代码如下:
void CDialogThreadDlg::OnBmenu()
{
// TODO: Add your control notification handler code here
CRect rect;
m_BMenu.GetWindowRect(&rect);

CMenu BMenu;

BMenu.CreateMenu();

BMenu.AppendMenu(MF_STRING,IDM_ABOUT,"关于");
BMenu.AppendMenu(MF_STRING,IDCANCEL,"退出");

///修改的地方如下:
CMenu* pMenu=BMenu.GetSubMenu(0);
pMenu->TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.bottom,this);

//BMenu.TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.bottom,this);

}
shakaqrj 2008-04-11
  • 打赏
  • 举报
回复
试试看
yuemin_mcl 2008-04-11
  • 打赏
  • 举报
回复
变成全局变量有什么不同吗?
在线等
shakaqrj 2008-04-11
  • 打赏
  • 举报
回复
把它变成非局部变量
yuemin_mcl 2008-04-11
  • 打赏
  • 举报
回复
BMenu.CreatePopupMenu();
没有用,弹出的那个菜单依然不会显示出来,最后那个菜单项是可以显示
cnzdgs 2008-04-11
  • 打赏
  • 举报
回复
无语。
搞清楚什么叫主菜单,什么叫弹出菜单。
把BMenu.CreateMenu();
改成BMenu.CreatePopupMenu();
就行了。
wuyongjun7322 2008-04-11
  • 打赏
  • 举报
回复
楼上的对极了,应该用GetSubMenu成员函数获得CMenu对象后,该对象才可以用TrackPopupMenu方法显示,生成上下文菜单
cnzdgs 2008-04-10
  • 打赏
  • 举报
回复
BMenu.CreatePopupMenu();

15,979

社区成员

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

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