非客户区

【勇芳软件工作室】汉化HomePreviousNext

只要窗口的非客户区域(如标题栏,菜单栏或窗口框架)的一部分必须更新,Windows将向窗口发送WM_NCPAINT消息。Windows还可以发送其他消息来指示窗口更新其客户区域的一部分;例如,当窗口变为活动或不活动时,它会发送WM_NCACTIVATE消息来更新其标题栏。通常,不建议对标准窗口处理这些消息,因为应用程序必须能够绘制窗口的非客户区域的所有必需部分。因此,大多数应用程序将这些消息传递给DefWindowProc进行默认处理。

为其窗口创建自定义非客户端区域的应用程序必须处理这些消息。当这样做时,应用程序必须使用窗口DC在窗口中执行绘图。【窗口DC】使应用程序能够绘制窗口的所有部分,包括非客户端区域。应用程序通过使用GetWindowDCGetDCEx函数检索窗口DC,并且在绘图完成时,必须使用ReleaseDC功能释放窗口DC。

Windows维护非客户区域的更新区域。当应用程序接收到WM_NCPAINT消息时,【wParam中】参数包含定义更新区域的维度的区域的句柄。应用程序可以使用句柄将更新区域与窗口DC的剪切区域进行组合。检索窗口DC时Windows不会自动组合更新区域,除非应用程序使用GetDCEx并指定区域句柄和DCX_INTERSECTRGN标志。如果应用程序没有组合更新区域,则只有在窗口外延伸的绘图操作才会被剪切。无论使用该区域,应用程序不负责清除更新区域。

如果应用程序处理WM_NCACTIVATE消息,处理完毕后必须返回TRUE才能使Windows直接完成活动窗口的更改。如果在应用程序收到WM_NCACTIVATE消息时窗口最小化,则应将消息传递给DefWindowProc.在这种情况下,默认功能会重新绘制图标的标签。