0

我需要禁用所有调整大小,但WMSZ_BOTTOM包括禁用相应的鼠标图标。

处理WM_GETMINMAXINFO没有帮助,因为它在窗口矩形被调整(内部WM_CREATE)之前被调用,所以我没有什么可以设置的。我尝试复制当前矩形并将其设置WM_SIZING为rect 得到恢复)。这些看起来像黑客而不是一些聪明的方法。lParamGetWindowRect()

以及当鼠标悬停在底部以外的窗口边框上时如何禁用调整大小的鼠标图标?

4

2 回答 2

4

@manuell 的另一种方法,不需要您自己检查鼠标位置:

case WM_NCHITTEST:
    {
        LRESULT lRes = DefWindowProc(hWnd, uMsg, wParam, lParam);
        if (lRes == HTBOTTOMLEFT || lRes == HTBOTTOMRIGHT
        ||  lRes == HTTOPLEFT || lRes == HTTOPRIGHT || lRes == HTTOP
        ||  lRes == HTLEFT || lRes == HTRIGHT || lRes == HTSIZE)
            lRes = HTBORDER; // block resizing for all but HTBOTTOM

        return lRes;
    }
于 2013-11-11T18:43:23.287 回答
0

对于“当鼠标悬停在底部以外的窗口边框上时如何禁用调整大小的鼠标图标?” 问题:处理 WM_NCHITTEST 消息。

光标的鼠标坐标在 lParam 中,相对于屏幕。

#include <windowsx.h>

case WM_NCHITTEST: {
    int iMouseX = GET_X_LPARAM( lParam );
    int iMouseY = GET_Y_LPARAM( lParam );
    RECT rect;
    GetWindowRect( hWnd, &rect );
    int xPos = iMouseX - rect.left; 
    int yPos = iMouseY - rect.top;
    // here, check where the mouse is
    // return DefWindowProc for default processing
    // return HTBORDER for "no sizing border" if mouse is over border
于 2013-11-11T17:42:22.680 回答