代码之家  ›  专栏  ›  技术社区  ›  Mike Caron

不在cwnd上绘制thickframe

  •  1
  • Mike Caron  · 技术社区  · 15 年前

    我有一个应用程序窗口,在其中我添加了WS-ThickFrame样式,并删除了WS-Caption样式。当窗口最大化时,我想隐藏“ws”thickframe,但保留“aero-snap”功能,因此我修改了“ws”的处理程序,以返回与窗口边框大小相关的膨胀矩形。

    也就是说,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会在边界内绘制。在设置/取消设置窗口焦点时,是否有一条消息可以让我返回膨胀的矩形,或者至少重新调整窗口大小以再次隐藏“窗口粗框”?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    是的,那不行。为wm_etminmaxinfo实现一个消息处理程序,以允许窗口的边框从屏幕上脱落。注意,如果您没有设置链接器的/subsystem选项来表示您的程序是为vista或win7(版本6,0)设计的,那么当您使用getWindowRect()时,Aero将对您撒谎。您返回的值基于薄(旧)边界。

    推荐文章