2012-08-16 213 views
0

我的程序是无铬窗口,当用户拖动我的对话框的任何部分时,我想移动窗口。一旦使用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没有成功。

感激,如果任何人有任何建议:)

+1

'WM_NCHITTEST'是合适的解决方案。你没有发布你试过的代码,所以我不能说出它可能有什么问题。 – 2012-08-16 06:50:36

回答

0

的DefWindowProc函数处理程序WM_SYSCOMMAND会吃鼠标按钮弹起消息这就是为什么你没有看到它。但是,您的SendMessage调用在拖动完成之前不会实际返回,因此您可以将其作为鼠标按钮的通知。