gpt4 book ai didi

c - 使用 WM_NCHITTEST 时捕获鼠标左键时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:58 25 4
gpt4 key购买 nike

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时正确获取鼠标左键的状态?

最佳答案

错误:} } break; 应该读作 } return hit; }

但是,这里发生了一些更激进的事情。 WM_NCHITTEST 不能像那样使用,可以使用当前鼠标位置以外的坐标调用。这意味着您的 SendNotifyMessageA 可以发送垃圾。

我看到您有一个用于 WM_NCLBUTTONDOWN 的处理程序。也许这就是你所需要的。或者,如果您试图使窗口可以在其上的任何位置拖动,应该像这样:

case WM_NCHITTEST:  {
LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam );
if ( hit == HTCLIENT ) {
return HTCAPTION;
}
return hit;
}

WM_NCLBUTTONDOWN 的文档和 WM_NCLBUTTONUP说他们立即开火。真的很容易忘记你的 InvalidateRect打电话,所以不要让你的屏幕为你重绘,所以它看起来很慢。

关于c - 使用 WM_NCHITTEST 时捕获鼠标左键时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com