我有一个应用程序窗口,我在其中添加了 WS_THICKFRAME 样式并删除了 WS_CAPTION 样式。当窗口最大化时,我想隐藏 WS_THICKFRAME,但保留 Aero-Snap 功能,因此我更改了 WS_NCCALCSIZE 的处理程序以返回相对于窗口边框大小的膨胀矩形。
也就是说,WS_NCCLIENTSIZE 处理程序代码的重要部分如下所示:
...
CRect rc( lpncsp->rgrc[0] );
if (IsZoomed())
{
int borderSize = GetSystemMetrics(SM_CYSIZEFRAME);
rc.InflateRect(borderSize,topOff+borderSize,borderSize,borderSize);
}
else
rc.InflateRect(0,topOff+0,0,0);
lpncsp->rgrc[0] = rc;
...
该代码有效地隐藏了 WS_THICKFRAME。
唯一的问题是,当窗口失去焦点或重新获得焦点(最大化时)时,WS_THICKFRAME 被绘制在边界内。当设置/取消设置窗口焦点时,是否有一条消息可以让我返回 Inflated rect 或至少重新调整窗口大小以再次隐藏 WS_THICKFRAME?