类显示设备上下文

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

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

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

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

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

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