11

我在 StackOverflow 上发现了更多关于我的主题的问题。其中之一在这里

我还阅读了有关此结构的 Microsoft 文档MINMAXINFO以及与此结构相关的消息。我根本无法让它工作......这是我迄今为止尝试过的:

case WM_PAINT:
{
    MINMAXINFO mmi = { 0 };
    SendMessage(hWnd, WM_GETMINMAXINFO, NULL, (LPARAM)&mmi);
    POINT sz = { 640, 480 };
    mmi.ptMaxSize = sz; 
}
break;

我认为这是完全错误的,因为它对窗户没有任何影响......

我怎样才能让这个工作,最小尺寸W: 450, H: 250和最大尺寸W:800, H: 600

我需要的效果的进一步解释:当用户拖动窗口的一个角或边框,并且窗口具有最大/最小尺寸时,用户不能使窗口大于或小于minimum_size/maximum_size

4

1 回答 1

16

WM_GETMINMAXINFO是系统发送到窗口的消息。当它想知道窗口的最小和最大允许大小时,它会发送该消息。您永远不会发送该消息。但是,您可以在该消息发送给您时回复该消息。

因此,您需要WM_GETMINMAXINFO在窗口过程中添加一个案例:

case WM_GETMINMAXINFO:
{
    MINMAXINFO* mmi = (MINMAXINFO*)lParam;
    mmi->ptMaxSize.x = 800;
    mmi->ptMaxSize.y = 600;
    return 0;
}

事实证明,您想要控制跟踪大小。这样做:

case WM_GETMINMAXINFO:
{
    MINMAXINFO* mmi = (MINMAXINFO*)lParam;
    mmi->ptMinTrackSize.x = 450;
    mmi->ptMinTrackSize.y = 250;
    mmi->ptMaxTrackSize.x = 640;
    mmi->ptMaxTrackSize.y = 480;
    return 0;
}
于 2013-09-26T18:27:11.410 回答