平台 SDK: Windows GDI

GetDCEx

GetDCEx函数检索指定窗口的客户区或整个屏幕的显示设备上下文(DC)的句柄。 您可以在随后的GDI函数中使用返回的句柄来绘制DC。

此函数是GetDC函数的扩展,它使应用程序能够更好地控制客户区中的方式和裁剪是否发生。

HDC GetDCEx(
  HWND hWnd,      // 窗口句柄
  HRGN hrgnClip,  // 剪辑区域句柄
  DWORD flags     // 创建选项
);

参数

  • hWnd

  • [in] 要检索DC的窗口句柄。 如果此值为NULL,则GetDCEx将检索整个屏幕的DC。

    Windows 98/Me, Windows 2000/XP: 要获取特定显示器的DC,请使用EnumDisplayMonitors和CreateDC函数。

  • hrgnClip

  • [in] 指定可以与DC的可见区域组合的裁剪区域。 如果标志的值是DCX_INTERSECTRGN或DCX_EXCLUDERGN,则操作系统会承担该区域的所有权,并在不再需要时自动将其删除。 在这种情况下,成功调用GetDCEx后,应用程序不应使用该区域,甚至不要删除它。

  • flags

  • [in] 指定如何创建DC。 该参数可以是以下一个或多个值。

    含义
    DCX_WINDOW返回与窗口矩形对应的DC,而不是客户区矩形。
    DCX_CACHE从缓存中返回DC,而不是OWNDC或CLASSDC窗口。 基本上覆盖CS_OWNDC和CS_CLASSDC。
    DCX_PARENTCLIP使用父窗口的可见区域。 父级的WS_CLIPCHILDREN和CS_PARENTDC样式位将被忽略。 原点设置在由hWnd标识的窗口的左上角。
    DCX_CLIPSIBLINGS排除由hWnd标识的窗口上方所有兄弟窗口的可见区域。
    DCX_CLIPCHILDREN排除由hWnd标识的窗口下面的所有子窗口的可见区域。
    DCX_NORESETATTRS当DC发布时,不会将此DC的属性重置为默认属性。
    DCX_LOCKWINDOWUPDATE允许绘图,即使LockWindowUpdate调用有效,否则将排除此窗口。 用于追踪期间的绘图。
    DCX_EXCLUDERGN由hrgnClip标识的剪辑区域从返回的DC的可见区域中排除。
    DCX_INTERSECTRGN由hrgnClip标识的裁剪区域与返回的DC的可见区域相交。
    DCX_VALIDATE使用DCX_INTERSECTUPDATE指定时,会导致DC完全验证。 与DCX_INTERSECTUPDATE和DCX_VALIDATE一起使用此函数与使用BeginPaint函数相同。


返回值

如果函数成功,则返回值是指定窗口的DC的句柄。

如果函数失败,返回值为NULL。 hWnd参数的值无效将导致函数失败。

Windows NT/2000/XP: 要获得扩展的错误信息,请调用GetLastError。

备注

除非显示DC属于窗口类,否则必须调用ReleaseDC函数以在绘制后释放DC。 另外,ReleaseDC必须从调用GetDCEx的同一个线程中调用。 DC的数量仅受可用内存的限制。

Windows 95/98/Me: 在任何时候只有五个常见的DC可用,因此未能释放DC会阻止其他应用程序访问DC。

如果在注册类时将CS_CLASSDC,CS_OWNDC或CS_PARENTDC指定为WNDCLASS结构中的样式,该函数将返回属于该窗口类的DC的句柄。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.51和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.