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后应该就可以实现正常,但怎么实现???