C++ 移动窗口-设置最小宽度/高度?

C++ 移动窗口-设置最小宽度/高度?,c++,winapi,C++,Winapi,有没有办法在窗户上强制规定最小尺寸(宽度和高度) 我见过一些应用程序,它们不允许在某个点以下调整窗口大小,并且不闪烁或做任何事情。此外,如果分辨率低于这些最小值,他们将不允许最大化,而是将自己恢复到填充屏幕,但从未最大化 如何做到这一点?我自己还没有做到这一点,但类似的方法应该会奏效: LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) {

有没有办法在窗户上强制规定最小尺寸(宽度和高度)

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


如何做到这一点?

我自己还没有做到这一点,但类似的方法应该会奏效:

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
来设置默认值,而不是重新设计轮子,可以节省大量工作。

我自己没有做过这件事,但类似的事情应该可以做到:

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
来设置默认值,而不是重新设计轮子,您可以节省大量工作。

您可以使用GetWindowRect来检查窗口的大小,如果它大于或小于您想要的大小,您可以使用SetWindowLong并添加DS\u FIXEDSYS,这样您就可以阻止窗口的大小调整

您可以使用GetWindowRect检查窗口的大小,如果它大于或小于您想要的大小,您可以使用SetWindowLong并添加DS\u FIXEDSYS以阻止窗口的大小调整

尝试处理
WM\u大小调整
,如果需要,请调整大小它马上就要过去了。@chris请发布一个例子并给出答案?请检查这个。这里有一个对话框的完整例子,它在其他事情中强制执行最小大小:它使用
WM\u GETMINMAXINFO
。尝试处理
WM\u size
,如果它即将过去,请调整它的大小。@chris请发布一个例子并使其成为一个例子答案?请检查。这里有一个对话框的完整示例,它强制执行最小大小:它使用
WM_GETMINMAXINFO
@GRIGORE-TURBODISEL,如果您发布您的调整,我可以更新我的答案,以帮助那些将来寻找本机winapi解决方案的人。您做了两个
GetSystemMetrics()
以确保屏幕上有足够的空间来执行这些最小值。还有一个
lpfnWndProc
,因为我花了一些时间搜索它,我试图看看当最大化窗口时会发生什么。很抱歉,如果我听起来像个十足的傻瓜,但我正处于桌面编程的第一天。请告诉我,处理这个问题的“正确”技巧是信息。@Luke,谢谢。我看到了这条信息,但我从未真正看过它。当你阅读这篇文章时,这一点非常清楚。@GRIGORE-TURBODISEL,如果你发布你的调整,我可以更新我的答案,以帮助那些将来寻找本机winapi解决方案的人。我做了两次
GetSystemMetrics()
以确保屏幕上有足够的空间来执行这些最小值。还有一个
lpfnWndProc
,因为我花了一些时间搜索它,我试图看看当最大化窗口时会发生什么。很抱歉,如果我听起来像个十足的傻瓜,但我正处于桌面编程的第一天。请告诉我,处理这个问题的“正确”技巧是信息。@Luke,谢谢。我看到了这条信息,但我从未真正看过它。当你读这篇文章时,它是非常清楚的。