有没有办法在窗口上强制执行最小尺寸(宽度和高度)?
我见过不允许将窗口大小调整到一个点以下的应用程序,并且在没有闪烁或任何东西的情况下做到这一点。此外,如果分辨率低于这些最小值,它们将不允许最大化,而是会恢复自己以填充屏幕但从未最大化。
如何做到这一点?
我自己没有这样做,但这样的事情应该有效:
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
设置默认值而不是重新发明轮子来节省大量工作。
您可以使用GetWindowRect来检查窗口的大小,如果它比您想要的更大或更小,您可以使用SetWindowLong并添加DS_FIXEDSYS这样您就可以阻止窗口的大小