我希望有一个边框和标题少窗口,所以我做SetWindowLongPtrW(window_handle,GWL_STYLE,0);
之后我无法移动我的窗口以便在我的WndProc中移动
if( message == WM_NCHITTEST ) {
RECT rc;
GetClientRect( hwnd, &rc );
MapWindowPoints( hwnd, GetParent( hwnd ), (LPPOINT)&rc, 2 );
int mouseX = LOWORD( lParam ) - rc.left;
int mouseY = HIWORD( lParam ) - rc.top;
POINT p;
p.x = mouseX;
p.y = mouseY;
return PtInRect( &rc, p ) ? HTCAPTION : DefWindowProc( hwnd, message, wParam, lParam );
}
它有效,第一次移动窗口。在我用鼠标停止点击后,它不会再次移动:/
答案 0 :(得分:1)
tar -xvzf anyconnect-predeploy-linux-64-4.3.05017-k9.tar\ 6.59.23\ AM.gz
将隐藏窗口,假设它不会导致更严重的问题。使用SetWindowLongPtrW( window_handle, GWL_STYLE, 0 );
并将其与有效窗口样式组合,或使用GetWindowLongPtr
您描述的错误与此无关。您正尝试使用ShowWindow
和GetClientRect
查找窗口的屏幕坐标。结果将不准确,因为窗口可能有边框和标题栏。
请改用MapWindowPoints
。这将为您提供窗口的屏幕坐标。
您可以将其与鼠标位置GetWindowRect
和LOWORD(lParam)
进行比较。这已经是屏幕坐标。此代码将在鼠标落入窗口的每个位置移动屏幕:
HIWORD(lParam)
不要从鼠标位置减去RECT rc;
GetWindowRect(hwnd, &rc);
int mouseX = LOWORD(lparam);
int mouseY = HIWORD(lparam);
和rc.left
。这将转换客户端坐标中的坐标(粗略)。当窗口位于屏幕的左上角时,您的代码可能会起作用,但稍后移动窗口时它将无法工作。
如果您希望在客户端窗口坐标中工作,请使用rc.top
。