何时在窗口中绘制
应用程序在各种时间在窗口中绘制:首次创建窗口时、更改窗口大小时、从另一个窗口后面移动窗口时、最小化或最大化窗口时、显示打开的文件中的数据以及滚动、更改或选择所显示数据的一部分时。
系统管理移动窗口和调整窗口大小等操作。 如果操作影响窗口的内容,系统会将窗口的受影响部分标记为已准备好更新,并在下一次机会向窗口的窗口过程发送 WM_PAINT 消息。 该消息是应用程序确定必须更新的内容并执行必要绘制的信号。
某些操作由应用程序管理,例如显示打开的文件和选择显示的数据。 对于这些操作,应用程序可以标记以更新受操作影响的窗口部分,从而在下一次机会发送 WM_PAINT 消息。 如果操作需要即时反馈,应用程序可以在操作发生时绘制,而无需等待 WM_PAINT。 例如,典型的应用程序会突出显示用户选择的区域,而不是等待下一 个WM_PAINT 消息来更新该区域。
在所有情况下,应用程序一旦创建,就可以在窗口中绘图。 若要在窗口中绘图,应用程序必须首先检索窗口的显示设备上下文的句柄。 理想情况下,应用程序在处理 WM_PAINT 消息期间执行其大部分绘制操作。 在这种情况下,应用程序通过调用 BeginPaint 函数检索显示设备上下文。 如果应用程序在任何其他时间(例如从 WinMain 内部或在处理键盘或鼠标消息期间)进行绘制,它将调用 GetDC 或 GetDCEx 函数来检索显示 DC。