通过使用【DC类】,应用程序可以为属于给定类的每个窗口使用单个显示器DC。类DC通常与使用相同属性值绘制的控制窗口一起使用。像私人DCs一样,DC类可以最大程度地减少准备用于绘图的DC所需的时间。
如果窗口属于具有CS_CLASSDC样式的窗口类,Windows将为窗口提供类DC。Windows在创建属于该类的第一个窗口时创建DC,然后对该类中随后创建的所有窗口使用相同的DC。最初,类DC具有与普通DC相同的属性默认值,但应用程序可以随时修改这些值。除了剪辑区域和设备原点之外,Windows会保留所有更改,直到该类中的最后一个窗口被破坏为止。对一个窗口进行的更改适用于该类中的所有窗口。
应用程序可以在创建第一个窗口后随时使用GetDC函数来检索DC类的句柄。应用程序可以保留和使用句柄,而不会释放它,因为类DC不是显示器DC缓存的一部分。如果应用程序在同一窗口类中创建另一个窗口,则应用程序必须再次检索类DC。检索DC为新窗口设置正确的设备原点和裁剪区域。应用程序检索类中新窗口的类DC后,DC不能再用于绘制原始窗口,而不再为该窗口检索。一般来说,每次必须绘制一个窗口时,应用程序必须显式地检索窗口的类DC。
使用类DC的应用程序在处理WM_PAINT消息时应始终调用BeginPaint.该函数为窗口设置正确的设备原点和剪切区域,并且包含更新区域。如果BeginPaint隐藏该应用程序,还应调用EndPaint恢复插入符号。EndPaint对DC类没有其他影响。
当向应用发送WM_ERASEBKGND消息时,Windows会传递类DC,允许当前属性值影响应用程序或Windows处理此消息时执行的任何绘图。Windows提供具有WM_ICONERASEBKGND消息的窗口DC,而不管对应的窗口是否具有类DC。如果具有私有DC的窗口,应用程序可以使用GetDCEx强制Windows返回具有DC类型的窗口的公共DC。
不建议使用DC类。