如何判断鼠标是否在弹出菜单上

xiaogang_1 2009-12-07 11:33:46
我使用TrackPopupMenuEx()函数弹出菜单,请问我怎么才能知道当前鼠标是否在菜单上
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidHsing 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a746027209 的回复:]
ls 太麻烦了,可以直接在WM_MOUSEMOVE消息处理函数中...
void ##Class::OnMouseMove(CPoint point)
{
int cxMenu=GetSystemMetrics(SM_CXMENUSIZE);
int cyMenu=GetSystemMetrics(SM_CYMENUSIZE);
CRect rect;
GetClientRect(&rect);
rect.SetRect(rect.left,rect.top-cyMenu,rect.right,0);
if(rect.PtInRect(point))
  MessageBox("鼠标在菜单上");
}
上面是在没有工具栏的情况下...
[/Quote]

这位同胞热情可嘉,然而请看清 lz 的要求
TrackPopupMenuEx()函数弹出菜单

而你那做的是主菜单


snowying2008 2009-12-08
  • 打赏
  • 举报
回复
首先判断鼠标位置,然后根据位置判断鼠标所在的窗口句柄,再跟弹出菜单的句柄比较,看是不是相等就行了
wsc1509 2009-12-08
  • 打赏
  • 举报
回复
LX!呵呵,我不懂
maple_zhj 2009-12-08
  • 打赏
  • 举报
回复
HitTest
psbeond 2009-12-08
  • 打赏
  • 举报
回复
按DavidHsing说的去做。你可以替换菜单的窗口过程, 并处理WM_MOUSEMOVE消息。
羽毛乱发 2009-12-07
  • 打赏
  • 举报
回复
个人思路:单击鼠标,弹出菜单,然后得到菜单区域,在在MOUSEMOVE里面判断,
mmilmf 2009-12-07
  • 打赏
  • 举报
回复
使用TrackMouseEvent()试试,当鼠标停在某位置时,设定的时间内会
该函数会发送WM_MOUSEHOVER消息,
将TRACKMOUSEEVETN 的句柄设为菜单的句柄,这样会响应指定的菜单
xiaogang_1 2009-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 laowu_ 的回复:]
判断点击的区域,如果是要弹出菜单的区域,则弹出菜单
[/Quote]

我需要做的判断当前鼠标是否在菜单上,而不是单击
_JeffreyWu 2009-12-07
  • 打赏
  • 举报
回复
判断点击的区域,如果是要弹出菜单的区域,则弹出菜单
a746027209 2009-12-07
  • 打赏
  • 举报
回复
对不起,上面的代码有错误!应该在主框架窗口中处理函数...

void ##Class::OnMouseMove(CPoint point)
{
CRect rectWindow;
GetWindowRect(&rectWindow);
int cyMenu=GetSystemMetrics(SM_CYMENUSIZE);
int cyCaption=GetSystemMetrics(SM_CYCAPTION);
rectWindow.SetRect(rectWindow.left,rectWindow.top+cyCaption,
rectWindow.right,rectWindow.top+cyCaption+cxMenu);
ScreenToClient(&point);
if(rectWindow.PtInRect(point))
MessageBox("鼠标在菜单上");
}
a746027209 2009-12-07
  • 打赏
  • 举报
回复
ls 太麻烦了,可以直接在WM_MOUSEMOVE消息处理函数中...
void ##Class::OnMouseMove(CPoint point)
{
int cxMenu=GetSystemMetrics(SM_CXMENUSIZE);
int cyMenu=GetSystemMetrics(SM_CYMENUSIZE);
CRect rect;
GetClientRect(&rect);
rect.SetRect(rect.left,rect.top-cyMenu,rect.right,0);
if(rect.PtInRect(point))
MessageBox("鼠标在菜单上");
}
上面是在没有工具栏的情况下...
DavidHsing 2009-12-07
  • 打赏
  • 举报
回复
简单,弹出菜单也是个窗口,类名是 #32768. 你

FindWindow(_T("#32768"), NULL)

之后用

GetWindowRect(...);
GetCousorPos(...);
PtInRect(...);

即可

15,979

社区成员

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

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