我用的是EVC4.0
想做一个触摸的程序 所以用到了OnMouseMove但是在这个过程中发现了个问题:
Dialog1中OnMouseMove函数调用Dialog2(而且Dialog2中也有OnMouseMove函数,用来调用Dialog3的)当我触发Dialog1中的OnMouseMove,调用了Dialog2,但同时Dialog2中的OnMouseMove也被调用了,
所以又会到了Dialog3界面。不知道什么原因 谢谢指教
想做一个触摸的程序 所以用到了OnMouseMove但是在这个过程中发现了个问题:
Dialog1中OnMouseMove函数调用Dialog2(而且Dialog2中也有OnMouseMove函数,用来调用Dialog3的)当我触发Dialog1中的OnMouseMove,调用了Dialog2,但同时Dialog2中的OnMouseMove也被调用了,
所以又会到了Dialog3界面。不知道什么原因 谢谢指教
==用程序说话,把代码拿出来。
{
// TODO: Add your message handler code here and/or call default
Move move;//Move 是Dialog2的类
move.DoModal();
CDialog::OnMouseMove(nFlags, point);
}
在Move.cpp中同样添加OnMouseMovevoid Move::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
MessageBox(_T("aa"));//问题在这里 (1)
CDialog::OnMouseMove(nFlags, point);
}
(1)第一个OnMouseMove调用 执行后 ,Dialog2显示出来,这样就应该完成了,
但是Dialog2对应的void Move::OnMouseMove也被调用了,也就是出现了提示“aa”?
什么原因?
你把Move对话框的初始位置放远一点,别用默认的位置,这样正好你鼠标就在那里
窗口在状态改变的时候,如果它的领域里有鼠标,他就会收到WM_MOUSEMOVE消息,尽管鼠标没有被挪动。
这是一个现实,如果你想利用WM_MOUSEMOVE消息做什么事情,注意到这一点就好了。状态改变=active, focus, menu 等等的变化。
---------
为什么会这样?我个人认为微软这样做是为了防止没有受到应该有的WM_MOUSEMOVE消息。很显然有点粗糟。
他就会收到WM_MOUSEMOVE消息,尽管鼠标没有被挪动。怎么解决呢 1、我尝试着在初始化函数中 加 Sleep,但是发现不可以2、在窗口初始化完成后,加一个标志,初始化之前不允许OnMouseMove不知道行不行