MoveWindow - 设置最小宽度/高度?

时间:2012-05-20 02:02:08

标签: c++ winapi

有没有办法在窗口上强制实施最小尺寸(宽度和高度)?

我见过的应用程序不允许将窗口大小调整到一个点以下,并且没有闪烁或其他任何操作。此外,如果分辨率低于这些最小值,它们将不允许最大化,而是将自己恢复到填充屏幕但从未最大化。

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我自己没有这样做,但这样的事情应该有效:

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);
}

基本上,如果窗口的矩形超过最大宽度或高度,它会调整它并将其发送,因此不会导致闪烁。再说一遍,我从未尝试过这个,所以我不完全确定。

正如卢克指出的那样,你可以通过处理WM_GETMINMAXINFO来设置默认值而不是重新发明轮子来节省大量工作。

答案 1 :(得分:0)

您可以使用 GetWindowRect 来检查窗口的大小,如果它大于或小于您想要的,您只需使用 SetWindowLong 并添加 DS_FIXEDSYS 所以你将阻止窗口的大小调整

相关问题