WM_NCCALCSIZE消息

必须计算窗口工作区的大小和位置时发送。 通过处理此消息,应用程序可以在窗口的大小或位置发生更改时控制窗口工作区的内容。

窗口通过其 WindowProc 函数接收此消息。

#define WM_NCCALCSIZE                   0x0083

参数

wParam

如果 wParamTRUE,则指定应用程序应指示工作区的哪个部分包含有效信息。 系统将有效信息复制到新工作区中的指定区域。

如果 wParamFALSE,则应用程序不需要指示工作区的有效部分。

lParam

如果 wParamTRUE则 lParam 指向包含应用程序可用于计算客户端矩形的新大小和位置的信息 的NCCALCSIZE_PARAMS 结构。

如果 wParamFALSE则 lParam 指向 RECT 结构。 在条目中,结构包含窗口的建议窗口矩形。 退出时,结构应包含相应窗口工作区的屏幕坐标。

返回值

类型: LRESULT

如果 wParam 参数为 FALSE,则应用程序应返回零。

如果 wParamTRUE,则应用程序应返回零或以下值的组合。

如果 wParamTRUE 且应用程序返回零,则保留旧工作区,并与新工作区的左上角对齐。

返回代码/值 说明
WVR_ALIGNTOP
0x0010
指定要保留窗口的工作区,并与窗口的新位置的顶部对齐。 例如,若要将工作区与左上角对齐,请返回WVR_ALIGNTOP和 WVR_ALIGNLEFT 值。
WVR_ALIGNRIGHT
0x0080
指定要保留窗口的工作区,并与窗口新位置的右侧对齐。 例如,若要将工作区与右下角对齐,请返回 WVR_ALIGNRIGHT 和WVR_ALIGNBOTTOM值。
WVR_ALIGNLEFT
0x0020
指定要保留窗口的工作区,并与窗口新位置的左侧对齐。 例如,若要将工作区与左下角对齐,请返回 WVR_ALIGNLEFTWVR_ALIGNBOTTOM 值。
WVR_ALIGNBOTTOM
0x0040
指定要保留窗口的工作区,并与窗口的新位置底部对齐。 例如,若要将工作区与左上角对齐,请返回WVR_ALIGNTOP和 WVR_ALIGNLEFT 值。
WVR_HREDRAW
0x0100
与其他任何值( WVR_VALIDRECTS除外)结合使用时,如果客户端矩形水平更改大小,则窗口将完全重新绘制。 此值类似于 CS_HREDRAW 类样式
WVR_VREDRAW
0x0200
与其他任何值结合使用( WVR_VALIDRECTS除外)会导致在客户端矩形垂直更改大小时完全重新绘制窗口。 此值类似于 CS_VREDRAW 类样式
WVR_REDRAW
0x0300
此值会导致重新绘制整个窗口。 它是 WVR_HREDRAWWVR_VREDRAW 值的组合。
WVR_VALIDRECTS
0x0400
此值指示,从WM_NCCALCSIZE返回时,NCCALCSIZE_PARAMS结构NCCALCSIZE_PARAMS结构中的 rgrc[1] 和 rgrc[2] 成员指定的矩形分别包含有效的目标和源区域矩形。 系统将这些矩形组合在一起,以计算要保留的窗口区域。 系统将源矩形内窗口图像的任何部分复制到目标矩形。 这两个矩形都位于父相对坐标或屏幕相对坐标中。 此标志不能与任何其他标志组合在一起。
此返回值允许应用程序实现更详细的客户端应用程序保留策略,例如居中或保留一部分工作区。

 

注解

窗口可能重新绘制,具体取决于指定 CS_HREDRAW 还是CS_VREDRAW类样式。 这是 DefWindowProc 函数 (此消息的默认向后兼容处理,除了上表中所述的常规客户端矩形计算) 。

如果 wParamTRUE,只需返回 0 而不处理NCCALCSIZE_PARAMS矩形将导致工作区调整为窗口的大小,包括窗口框架。 这会从窗口中删除窗口框架和标题项,只显示工作区。

从 Windows Vista 开始,只需在 wParamTRUE 时返回 0 来删除标准帧不会影响使用 DwmExtendFrameIntoClientArea 函数扩展到工作区中的帧。 只会删除标准帧。

要求

要求 Value
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h (包括 Windows.h)

另请参阅

引用

DefWindowProc

MoveWindow

SetWindowPos

NCCALCSIZE_PARAMS

概念性

Windows

其他资源

矩形