将GWL_STYLE设置为0

时间:2017-09-12 18:21:52

标签: windows winapi window wndproc

我希望有一个边框和标题少窗口,所以我做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 );
}

它有效,第一次移动窗口。在我用鼠标停止点击后,它不会再次移动:/

1 个答案:

答案 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

隐藏窗口

您描述的错误与此无关。您正尝试使用ShowWindowGetClientRect查找窗口的屏幕坐标。结果将不准确,因为窗口可能有边框和标题栏。

请改用MapWindowPoints。这将为您提供窗口的屏幕坐标。

您可以将其与鼠标位置GetWindowRectLOWORD(lParam)进行比较。这已经是屏幕坐标。此代码将在鼠标落入窗口的每个位置移动屏幕:

HIWORD(lParam)

不要从鼠标位置减去RECT rc; GetWindowRect(hwnd, &rc); int mouseX = LOWORD(lparam); int mouseY = HIWORD(lparam); rc.left。这将转换客户端坐标中的坐标(粗略)。当窗口位于屏幕的左上角时,您的代码可能会起作用,但稍后移动窗口时它将无法工作。

如果您希望在客户端窗口坐标中工作,请使用rc.top