类显示设备上下文

通过使用 类设备上下文,应用程序可以对属于指定类的每个窗口使用单个显示设备上下文。 类设备上下文通常用于使用相同属性值绘制的控制窗口。 与专用设备上下文一样,类设备上下文可最大程度地减少为绘图准备设备上下文所需的时间。

如果窗口属于具有CS_CLASSDC样式的窗口类,则系统会为窗口提供类设备上下文。 系统在创建属于该类的第一个窗口时创建设备上下文,然后对类中随后创建的所有窗口使用相同的设备上下文。 最初,类设备上下文的属性与通用设备上下文具有相同的默认值,但应用程序可以随时修改这些属性。 系统保留除剪辑区域和设备源之外的所有更改,直到类中的最后一个窗口被销毁。 对一个窗口所做的更改适用于该类中的所有窗口。

应用程序可以在创建第一个窗口后随时使用 GetDC 函数检索类设备上下文的句柄。 应用程序可以保留和使用句柄而不释放它,因为类设备上下文不是显示设备上下文缓存的一部分。 如果应用程序在同一窗口类中创建另一个窗口,则应用程序必须再次检索类设备上下文。 检索设备上下文可设置新窗口的正确设备源和剪辑区域。 应用程序检索该类中新窗口的类设备上下文后,设备上下文不能再用于在原始窗口中绘制,而无需再次检索该窗口。 通常,每次必须在窗口中绘制时,应用程序必须显式检索窗口的类设备上下文。

使用类设备上下文的应用程序在处理 WM_PAINT 消息时应始终调用 BeginPaint。 该函数为窗口设置正确的设备源和剪辑区域,并合并更新区域。 如果 BeginPaint 隐藏插入符号,应用程序还应调用 EndPaint 来还原插入点。 EndPaint 对类设备上下文没有其他影响。

系统在将 WM_ERASEBKGND 消息发送到应用程序时传递类设备上下文,从而允许当前属性值在处理此消息时影响应用程序或系统执行的任何绘图。 与具有专用设备上下文的窗口一样,应用程序可以使用 GetDCEx 来强制系统为具有类设备上下文的窗口返回公共设备上下文。

不建议使用类设备上下文。