显示设备上下文

应用程序通过调用 BeginPaintGetDCGetDCEx 函数并标识显示相应输出的窗口来获取显示 DC。 通常,应用程序仅在必须在工作区中绘制时才获取显示 DC。 但是,可以通过调用 GetWindowDC 函数来获取窗口设备上下文。 应用程序完成绘图后,它必须通过调用 EndPaintReleaseDC 函数来释放 DC。

视频显示器有五种类型的 DC:

  • 通用
  • 私有
  • 窗口
  • Parent

类设备上下文

严格支持类设备上下文,以便与 16 位版本的 Windows 兼容。 编写应用程序时,请避免使用类设备上下文;请改用专用设备上下文。

常见设备上下文

常见设备上下文 显示由系统在特殊缓存中维护的 DC。 常见设备上下文用于执行不经常绘制操作的应用程序。 在系统返回 DC 句柄之前,它会使用默认对象、属性和模式初始化通用设备上下文。 应用程序执行的任何绘图操作都使用这些默认值,除非调用其中一个 GDI 函数来选择新对象、更改现有对象的属性或选择新模式。

由于只有有限数量的常见设备上下文存在,因此应用程序应在完成绘图后释放它们。 当应用程序发布通用设备上下文时,对默认数据所做的任何更改都将丢失。

专用设备上下文

专用设备上下文 是显示 DC,与常见设备上下文不同,即使应用程序释放默认数据更改,也会保留对默认数据的任何更改。 专用设备上下文用于执行大量绘图操作的应用程序,例如计算机辅助设计 (CAD) 应用程序、桌面发布应用程序、绘图和绘画应用程序等。 专用设备上下文不是系统缓存的一部分,因此使用后无需释放。 销毁该类的最后一个窗口后,系统会自动删除专用设备上下文。

应用程序在初始化 WNDCLASS 结构的样式成员并调用 RegisterClass 函数时,首先指定CS_OWNDC窗口类样式来创建专用设备上下文。 (有关窗口类的详细信息,请参阅 Window Classes.)

创建具有CS_OWNDC样式的窗口后,应用程序可以调用 GetDCGetDCExBeginPaint 函数一次,以获取标识专用设备上下文的句柄。 应用程序可以继续使用此句柄 (和关联的 DC) ,直到删除使用此类创建的窗口。 系统将保留对图形对象及其属性或图形模式所做的任何更改,直到删除窗口。

窗口设备上下文

使用窗口设备上下文,应用程序可以绘制窗口中的任意位置,包括非工作区。 窗口设备上下文通常由处理具有自定义非工作区的 窗口WM_NCPAINTWM_NCACTIVATE 消息的应用程序使用。 不建议将窗口设备上下文用于任何其他目的。 有关详细信息,请参阅 GetWindowDC

父设备上下文

父设备上下文使应用程序能够最大程度地减少为窗口设置剪辑区域所需的时间。 应用程序通常使用父设备上下文来加快控件窗口的绘制速度,而无需专用或类设备上下文。 例如,系统将父设备上下文用于按钮和编辑控件。 父设备上下文仅适用于子窗口,而不适用于顶级窗口或弹出窗口。 有关详细信息,请参阅 父显示设备上下文