平台 SDK: Windows GDI |
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.