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结构的rgrc[1] 和 rgrc[2] 成员指定的矩形分别包含有效的目标矩形和源区域矩形。 系统将合并这些矩形,以计算要保留的窗口面积。 系统会复制源矩形内窗口图像的任何部分,并将图像剪辑到目标矩形。 这两个矩形都采用父相对坐标或屏幕相对坐标。 此标志不能与任何其他标志组合使用。
此返回值允许应用程序实现更详细的工作区保留策略,例如居中或保留工作区的子集。

 

备注

根据是指定 CS_HREDRAW 还是CS_VREDRAW类样式,可以重新绘制窗口。 这是除上表) 所述的常规客户端矩形计算外, DefWindowProc 函数 (对此消息的默认向后兼容处理。

wParamTRUE 时,只需返回 0 而不处理 NCCALCSIZE_PARAMS 矩形将导致工作区调整为窗口大小(包括窗口框架)。 这将删除窗口框架并从窗口中描述文字项,只显示工作区。

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

要求

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

另请参阅

引用

DefWindowProc

MoveWindow

SetWindowPos

NCCALCSIZE_PARAMS

概念性

Windows

其他资源

矩形