【发布时间】:2012-08-12 08:05:26
【问题描述】:
我的程序是一个无镶边窗口,当用户拖动我的对话框的任何部分时,我想移动窗口。一旦使用了 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 尝试了许多不同的方法,但均未成功。
如果有人有任何建议,非常感谢:)
【问题讨论】:
-
WM_NCHITTEST是合适的解决方案。你没有发布你尝试过的代码,所以我不知道它可能有什么问题。