1

我有一个应用程序窗口,我在其中添加了 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?

4

1 回答 1

1

是的,那行不通。为 WM_GETMINMAXINFO 实现一个消息处理程序以允许窗口的边框从屏幕上脱落。请注意,如果您没有设置链接器的 /SUBSYSTEM 选项来说明您的程序是为 Vista 或 Win7(版本 6,0)制作的,那么当您使用 GetWindowRect() 时,Aero 会欺骗您。您获得的价值基于细(传统)边界。

于 2010-06-22T23:48:03.867 回答