Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WM_SYSCOMMAND SC_MOVE会吃掉鼠标事件,并且不会触发鼠标向上移动_C++_Windows_Atl_Wtl - Fatal编程技术网

C++ WM_SYSCOMMAND SC_MOVE会吃掉鼠标事件,并且不会触发鼠标向上移动

C++ WM_SYSCOMMAND SC_MOVE会吃掉鼠标事件,并且不会触发鼠标向上移动,c++,windows,atl,wtl,C++,Windows,Atl,Wtl,我的程序是一个无铬窗口,当用户拖动对话框的任何部分时,我想移动窗口。一旦使用WM_SYSCOMMAND,所有后续鼠标事件都将丢失 首先,我编写了一个程序来捕获鼠标事件,所有这些都可以很好地使用WTL BEGIN_MSG_MAP(CMainDlg) MSG_WM_LBUTTONUP(OnMouseUp) MSG_WM_LBUTTONDOWN(OnMouseDown) .... LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) { p

我的程序是一个无铬窗口,当用户拖动对话框的任何部分时,我想移动窗口。一旦使用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;
}
然后我在上面换到

LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
    print ("on mouse down");
    this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002);
    return 0;
}
拖动正在工作,窗口随着鼠标移动。但是,OnMouseUp事件不再被激发

使用WM_nChitter或ProcessMessage setHandled为true/false尝试了许多不同的方法,但没有成功


如果有人有任何建议,我们将不胜感激:)

WM_SYSCOMMAND的DefWindowProc处理程序将吃掉鼠标按钮向上的消息,这就是为什么您看不到它的原因。但是,在拖动完成之前,SendMessage调用实际上不会返回,因此您可以将其视为鼠标按钮向上的通知。

WM_SYSCOMMAND的DefWindowProc处理程序将吃掉鼠标按钮向上的消息,这就是为什么您看不到它的原因。但是,在拖动完成之前,SendMessage调用实际上不会返回,因此您可以将其视为鼠标按钮向上的通知。

感谢您描述为什么要这样做,因为有一种更好的方法:。

感谢您描述为什么要这样做,因为有一种更好的方法:。

WM\u-nchitest
是合适的解决方案。您没有发布您尝试的代码,因此我无法判断它可能有什么问题。
WM\u nchitest
是合适的解决方案。你没有发布你尝试过的代码,所以我不知道有什么问题。