【发布时间】:2019-05-26 03:47:12
【问题描述】:
case WM_NCHITTEST: {
LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam );
if ( hit == HTCLIENT ) {
hit = HTCAPTION;
SendNotifyMessageA( hWnd, WM_MOUSEMOVE, NULL, MAKELPARAM( LOWORD(lParam), HIWORD(lParam) ) );
pts.x = pts.y = 0;
ClientToScreen( hWnd, &pts );
SendNotifyMessageA( hWnd, WM_EXITSIZEMOVE, NULL,NULL );
return hit;
} } break;
case WM_NCLBUTTONDOWN: { LMB_Dyn[h2] = true; } break;
当我尝试通过单击客户区(窗口中的任何位置)来移动窗口时,我正在使用此代码。这工作正常。
但是我在正确接收鼠标左键的状态时遇到问题,虽然这种代码有效,但问题是当我进行简单的单击而不是“单击并移动”时,LMB_Dyn 变量(鼠标左键)有一些延迟(不会立即收到我按下鼠标按钮的通知。
使用WM_NCHITTEST时如何正确获取鼠标左键的状态?
【问题讨论】:
-
您为什么要发出
WM_MOUSEMOVE和WM_EXITSIZEMOVE消息?你不需要这样做。至于你的问题,看看GetAsyncKeyState(VK_LBUTTON) -
@Remy Lebeau 谢谢。这部分负责获取移动后窗口的位置并更新客户端坐标中的鼠标位置。我会检查 GetAsyncKeyState(VK_LBUTTON)。
-
GetAsyncKeyState(VK_LBUTTON) 似乎可以正确地在屏幕上的任何地方单击鼠标左键的状态,但是当我单击窗口的客户区时,变量的更新仍然很慢...
-
Stackoverflow 提示:虽然删除吸引反对票的问题可以保护您的声誉,但它对避免问题被禁止没有任何好处,只会让解禁变得更加困难。通常,一旦一个问题获得了几次反对票,它就会停止反对票。