Winapi WM_GETMINMAXINFO允许将最小值调整为大于但不小于开始调整大小时的值

Winapi WM_GETMINMAXINFO允许将最小值调整为大于但不小于开始调整大小时的值,winapi,windows-shell,Winapi,Windows Shell,我想根据高度限制窗口宽度的调整范围。我通过WM_GETMINMAXINFO实现这一点,但有一个怪癖(至少在Win10中)。如果在开始调整大小和“我的窗口高度”时支持最小宽度(例如80),则它永远不会低于80。当我拖动时,如果我降低高度,使最小宽度变为100,它将尊重这一点,但如果我拖动并增加高度,使最小宽度变为60,它仍然在80处停止(一直在调用WM_GETMINMAXINFO)。有什么诀窍可以让它发挥作用吗 我想到的一个技巧是,如果我能检测到调整大小的开始,我可以使用一些最小值,比如10,但接

我想根据高度限制窗口宽度的调整范围。我通过
WM_GETMINMAXINFO
实现这一点,但有一个怪癖(至少在Win10中)。如果在开始调整大小和“我的窗口高度”时支持最小宽度(例如80),则它永远不会低于80。当我拖动时,如果我降低高度,使最小宽度变为100,它将尊重这一点,但如果我拖动并增加高度,使最小宽度变为60,它仍然在80处停止(一直在调用
WM_GETMINMAXINFO
)。有什么诀窍可以让它发挥作用吗

我想到的一个技巧是,如果我能检测到调整大小的开始,我可以使用一些最小值,比如10,但接下来的请求将使用实际值,从而解决问题。有什么想法吗


蒂娅

将逻辑添加到WM_WINDOWPOSCHANGING,而不是使用WM_GETMINMAXINFO

case WM_WINDOWPOSCHANGING:
{
  // call default handler
  ::DefWindowProc(hwnd, umsg, wparam, lparam);

  // get structure pointer
  WINDOWPOS *wp=(WINDOWPOS *) lparam;

  // ... add logic here ...

  return 0;
}

您无法控制何时发送
WM_GETMINMAXINFO
;何时发送查询以及是否缓存结果取决于操作系统。如果您想将窗口大小锁定为特定的纵横比(听起来就是这样),那么我建议您处理
WM_WINDOWPOSCHANGING
;这允许您在调整窗口大小时更改窗口大小。将逻辑从WM_GETMINMAXINFO移到WM_WindowPosChangeing,现在可以按预期工作。请随时标记您自己,以帮助有相同问题的人。