动态创建的CMenu失去焦点后不消失

Helloooooo 2008-10-11 10:20:02
在对话框中动态创建一个菜单,本来如果鼠标点一下其它地方,这个菜单应该消失,但是事实却未必。
大家讨论下什么原因?

这是示例代码:

成员变量CMenu m_Menu;

void CMyDialog::FireMenu()
{
CPoint Point;
GetCursorPos(&Point);

if(m_Menu没有创建)
{
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(..);
}
m_Menu.TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y, this);
}

...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kinker 2009-11-25
  • 打赏
  • 举报
回复
什么原因?我也出现这个问题了。
vidding 2008-10-13
  • 打赏
  • 举报
回复
我也遇到过这个问题,感觉好你鼠标所点的其他UI有关。 因为我遇到的是同一个Menu,但鼠标点不同的UI,它有的可以消失掉,有的消失不了。现在还没有花时间查,关注。
dandycheung 2008-10-13
  • 打赏
  • 举报
回复
这种情况通常是在托盘区显示图标的时候才出现,在普通情况下很少见。主要和窗口是否处于前台/激活状态有关。
Conry 2008-10-13
  • 打赏
  • 举报
回复



if(m_Menu没有创建)
{
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(..);
}

//弹出菜单前加上下面这个函数
SetForegroundWindow();
m_Menu.TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y, this);

pigpy 2008-10-12
  • 打赏
  • 举报
回复
不好意思颜色没有加上,像m_Menu.Detach();
Try一下看看。
pigpy 2008-10-12
  • 打赏
  • 举报
回复
代码加上m_Menu.Detach();如下:
void CMyDialog::FireMenu() 
{
CPoint Point;
GetCursorPos(&Point); //注意,你这里不是屏幕坐标哦,最好加上下面这句
ClientToScreen(&Point);

if(m_Menu没有创建)
{
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(..);
}
m_Menu.TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y, this);
m_Menu.Detach();
}
用户 昵称 2008-10-12
  • 打赏
  • 举报
回复
	GetCursorPos( &pt );
popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
popmenu.DestroyMenu();
lwx300 2008-10-12
  • 打赏
  • 举报
回复
试试这样使用:

m_Menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,Point.x,Point.y, this);

15,979

社区成员

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

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