WM_SYSCOMMAND SC_MOVE吃掉鼠标事件和鼠标了,不会触发(WM_SYSCOMMAND

2019-11-01 00:16发布

我的计划是无边框窗口,我想移动窗口时,用户拖动对话框我的任何部分。 一旦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;
}

拖动工作和Windows随鼠标移动。 然而,OnMouseUp事件不再被解雇。

使用WM_NCHITTEST尝试过许多不同的方法,或ProcessMessage的setHandled至真/假都没有成功。

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

Answer 1:

感谢描述你为什么这样做,因为有一个更好的方法: 返回HTCAPTION响应WM_NCHITTEST



Answer 2:

该DefWindowProc函数处理程序WM_SYSCOMMAND会吃鼠标按钮弹起消息这就是为什么你没有看到它。 然而,你的SendMessage调用实际上不会返回,直到拖拽结束,所以你可以把它看作是鼠标按钮弹起的通知。



文章来源: WM_SYSCOMMAND SC_MOVE eats up mouse events and mouse up is not fired