为什么调试不能进入onmousemove事件?

love_c2004 2010-03-22 10:21:26
我在做一个类似qq的个人资料窗口,鼠标移到联系人的树上,出现一个浮动窗口(CDialog),上面有控件。。

鼠标移到联系人树的事件(onmousemove)写在 我自己扩展的树控件中,(树控件放到主窗口中,主窗口没有onmousemove事件)

鼠标在浮动窗口中移动的事件(onmousemove)写在浮动窗口Dialog中。


但是不明白的是,第二个onmousemove事件始终不触发..(消息映射也写了,就是调试跳不进去)


浮动窗口的dialog

写了消息映射的: ON_WM_MOUSEMOVE

void ProfileCardDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (_bMouseTrack) //若允许追踪,则。
{
TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof(csTME);
csTME.dwFlags = TME_LEAVE|TME_HOVER;
csTME.hwndTrack = m_hWnd;//指定要追踪的窗口
csTME.dwHoverTime = 10; //鼠标在按钮上停留超过10ms,才认为状态为HOVER
::_TrackMouseEvent(&csTME); //开启Windows的WM_MOUSELEAVE,WM_MOUSEHOVER事件支持
_bMouseTrack=FALSE; //若已经追踪,则停止追踪
}

}


...全文
459 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fandh 的回复:]

但是,你怎么判断鼠标离开了?
[/Quote]

似乎真的判断不了鼠标离开啊。。谁有办法吗?
SullenSun 2010-03-22
  • 打赏
  • 举报
回复
HWND SetCapture(
HWND hWnd // handle to window
);
截获窗口的鼠标消息,
鼠标钩子数截获整个程序的鼠标消息。
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
鼠标钩子 跟 setcapture 有区别吗?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fandh 的回复:]

但是,你怎么判断鼠标离开了?
[/Quote]

在onmousemove中判断鼠标的位置可以吗?
SullenSun 2010-03-22
  • 打赏
  • 举报
回复
可能是别的窗口接收了mousemove的消息。还有到了客户区外你的窗口接收不到mousemove消息。用鼠标钩子。。
fandh 2010-03-22
  • 打赏
  • 举报
回复
但是,你怎么判断鼠标离开了?
fandh 2010-03-22
  • 打赏
  • 举报
回复
可以写的,当鼠标离开后,你可以发送wm_close消息!
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
我最终要的效果,是鼠标在窗口中移动时,可以点击其中的控件,但是鼠标离开浮动窗口时摧毁窗口。。

如果PreTranslateMessage 中不能写 Destroywindow事件,那么应该写在哪里呢?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wwgddx 的回复:]

据说用Create()创建的窗口不响应OnMouseMove消息,不知道是不是真的?

PreTranslateMessage 中写 Destroywindow事件应该不可以吧,窗口都销毁了,PreTranslateMessage函数还在?
[/Quote]


有人知道这个吗?如果是真的就是动态创建的窗口都不响应OnMouseMove消息咯?
wwgddx 2010-03-22
  • 打赏
  • 举报
回复
据说用Create()创建的窗口不响应OnMouseMove消息,不知道是不是真的?

PreTranslateMessage 中写 Destroywindow事件应该不可以吧,窗口都销毁了,PreTranslateMessage函数还在?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
还有个问题是:

PreTranslateMessage 中可以写 Destroywindow事件吗?

好像我写了就出错了。。?请问为什么呢?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
我的鼠标已经离开了父窗口的客户区,也没有设置父窗口的鼠标捕获,请问下:这样也会给父窗口截获吗?

wwgddx 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 love_c2004 的回复:]
BOOL ProfileCardDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_MOUSEMOVE)
{
...............
}
}

这个可以调试进去


用OnMouseMove(UINT nFlags, CPoint point)

连在if那句的断点都不能进入哦。。
[/Quote]



看来还是fandh说的有道理,看来这种情况是会出现的,这两个里面接收消息有什么区别?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
浮动窗口的属性比较特殊?

请问下:浮动窗口哪些属性会影响鼠标消息的接收的啊?
wwgddx 2010-03-22
  • 打赏
  • 举报
回复
onmousemove事件始终不触发 是不是焦点不在浮动窗口上?

是不是消息被父窗口给截获了?

是不是你的浮动窗口的属性比较特殊,不接收鼠标消息?
love_c2004 2010-03-22
  • 打赏
  • 举报
回复
BOOL ProfileCardDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_MOUSEMOVE)
{
...............
}
}

这个可以调试进去



用OnMouseMove(UINT nFlags, CPoint point)

连在if那句的断点都不能进入哦。。
SullenSun 2010-03-22
  • 打赏
  • 举报
回复
你看看是不是你的IF条件没有搞对。。。
fandh 2010-03-22
  • 打赏
  • 举报
回复
搞错了!多谢两只兔子指正!是可以的!
Eleven 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]
BOOL ProfileCardDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_MOUSEMOVE)
{
...............
}
}

对话框里面,直接用ON_WM_MOUSEMOVE不行的!
[/Quote]
对话框时可以直接响应WM_MOUSEMOVE的,ON_WM_MOUSEMOVE()是可以行的。
WizardK 2010-03-22
  • 打赏
  • 举报
回复
直接用ON_WM_MOUSEMOVE不行?
加载更多回复(9)

15,979

社区成员

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

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