WM_WINDOWPOSCHANGING消息中的WINDOWPOS->flags成员怎么清除相应位SWP_DRAWFRAME???

WM_WINDOWPOSCHANGING消息备注:

对于具有WS_OVERLAPPED或WS_THICKFRAME样式的窗口,DefWindowProc函数将WM_GETMINMAXINFO消息发送到窗口。

这样做是为了验证窗口的新大小和位置,并强制执行CS_BYTEALIGNCLIENT和CS_BYTEALIGNWINDOW客户端样式。

通过不将WM_WINDOWPOSCHANGING消息传递给DefWindowProc函数,应用程序可以覆盖这些默认值。

在处理此消息时,修改WINDOWPOS中的任何值会影响窗口在Z顺序中的新大小,位置或位置。应用程序可以通过设置或清除WINDOWPOS的flags成员中的相应位来阻止对窗口的更改。

WINDOWPOS结构成员flags描述

flags 类型:UINT

该成员可以是以下一个或多个值。

值 含义

SWP_DRAWFRAME
0×0020

在窗口周围绘制一个框架(在窗口的类描述中定义)。与SWP_FRAMECHANGED标志相同。

SWP_FRAMECHANGED 0×0020

即使窗口的大小未更改,也会向窗口 发送WM_NCCALCSIZE消息。如果未指定此标志,则仅在更改窗口大小时发送WM_NCCALCSIZE。

    case WM_NCCALCSIZE:return 0;
    case WM_WINDOWPOSCHANGING:
    {
        WINDOWPOS *pos = (LPWINDOWPOS)lParam;
        pos->flags;//怎么清除相应位SWP_DRAWFRAME???
        return 0;
    }

WM_NCCALCSIZE消息返回0后可以无边框,但是最大化时会发生位移

不正常(-8, -8)-(1374, 776), 1382x784 (最大化)

正常(0,0)-(1366,768)(最大化)

清除相应位SWP_DRAWFRAME后应该就可以实现正常,但怎么实现???

pos->flags &= ~SWP_DRAWFRAME;

    case WM_NCCALCSIZE:return 0;
    case WM_WINDOWPOSCHANGING:
    {
        WINDOWPOS *pos = (LPWINDOWPOS)lParam;
        if (IsZoomed(hWnd))
        {
            pos->x = 0;
            pos->y = 0;
            pos->cx = 1366;
            pos->cy = 768;
            pos->flags &= ~SWP_DRAWFRAME;
        }
        return 0;
    }