有什么方法可以在窗口上强制最小尺寸(宽度和高度)?

我见过一些应用程序,它们不允许将窗口的大小调整到一个点以下,并且这样做不会闪烁或发生任何变化。同样,如果分辨率低于这些最小值,则它们将不允许最大化,而是将自己恢复为填充屏幕,但永远不会最大化。

如何做到这一点?

最佳答案

我自己还没有完成此操作,但是应该可以执行以下操作:

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_SIZING:
        {
            RECT r = *((RECT *)lParam);

            if (r.right - r.left > MAX_WIDTH)
                ((RECT *)lParam)->right = r.left + MAX_WIDTH;

            if (r.bottom - r.top > MAX_HEIGHT)
                ((RECT *)lParam)->bottom = r.top + MAX_HEIGHT;

            break;
        }
    }

    return DefWindowProc (hwnd, msg, wParam, lParam);
}

基本上,如果窗口要超出最大宽度或高度,它将对其进行调整并继续发送,因此不会引起闪烁。再说一次,我从未尝试过,所以我不确定。

正如Luke指出的那样,您可以通过处理WM_GETMINMAXINFO设置默认值来节省很多工作,而无需重新发明轮子。

关于c++ - MoveWindow-设置最小宽度/高度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10670228/

10-12 16:36