WM_SYSCOMMAND SC_MOVE吃掉了鼠标事件,鼠标没有被触发
问题描述:
我的程序是无铬窗口,当用户拖动我的对话框的任何部分时,我想移动窗口。一旦使用WM_SYSCOMMAND,所有后续的鼠标事件都将丢失。WM_SYSCOMMAND SC_MOVE吃掉了鼠标事件,鼠标没有被触发
首先,我编写了一个程序来捕获鼠标事件,并且所有工作都可以正常使用WTL。
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_LBUTTONUP(OnMouseUp)
MSG_WM_LBUTTONDOWN(OnMouseDown)
....
LRESULT OnMouseDown (UINT uKeys, CPoint pt) {
print ("on mouse down");
return 0;
}
LRESULT OnMouseUp (UINT uKeys, CPoint pt) {
print ("on mouse up");
return 0;
}
然后我改变onmousedown事件上面,
LRESULT OnMouseDown (UINT uKeys, CPoint pt) {
print ("on mouse down");
this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002);
return 0;
}
拖动工作和窗口沿着用鼠标移动。但是,OnMouseUp事件不再被解雇。
尝试了许多不同的方法,使用WM_NCHITTEST或ProcessMessage setHandled true/false没有成功。
感激,如果任何人有任何建议:)
答
的DefWindowProc函数处理程序WM_SYSCOMMAND会吃鼠标按钮弹起消息这就是为什么你没有看到它。但是,您的SendMessage调用在拖动完成之前不会实际返回,因此您可以将其作为鼠标按钮的通知。
'WM_NCHITTEST'是合适的解决方案。你没有发布你试过的代码,所以我不能说出它可能有什么问题。 – 2012-08-16 06:50:36