我的程序是一个无镶边窗口,当用户拖动我的对话框的任何部分时,我想移动窗口。一旦使用 WM_SYSCOMMAND,所有后续鼠标事件都将丢失。
首先,我编写了一个程序来捕获鼠标事件,并且所有的 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,但均未成功。
如果有人有任何建议,非常感谢:)