勇芳软件工作室.汉化:  Device Contexts > Device Contexts Functions >

GetDCEx

Previous pageReturn to chapter overviewNext page

描述

 

GetDCEx函数检索指定窗口或整个屏幕的客户区域的设备上下文(DC)的句柄。您可以在随后的GDI函数中使用返回的句柄来绘制直流。设备上下文是不透明的数据结构,其值由GDI内部使用。

 

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

 

C++ 语法

 

HDC GetDCEx(

__in HWND hWnd,

__in HRGN hrgnClip,

__in DWORD flags

);

 

PowerBASIC 语法

 

FUNCTION GetDCEx ( _

BYVAL hWnd AS DWORD, _

BYVAL hrgnClip AS DWORD, _

BYVAL flags AS DWORD _

) AS DWORD

 

参数

 

hWnd

 

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

 

Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:要获取特定显示器的DC,请使用EnumDisplayMonitorsCreateDC功能。 

 

hrgnClip

 

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

 

flags

 

[in]指定DC的创建方式。此参数可以是以下值中的一个或多个。

 

含义

DCX_WINDOW

&H00000001???

返回与窗口矩形相对应的DC,而不是客户端矩形。

DCX_CACHE

&H00000002???

从缓存返回一个DC,而不是OWNDC或CLASSDC窗口。基本上覆盖CS_OWNDC和CS_CLASSDC。

DCX_PARENTCLIP

&H00000020???

使用父窗口的可见区域。父级的WS_CLIPCHILDREN和CS_PARENTDC样式位将被忽略。原点设置为由的hWnd标识的窗口的左上角。

DCX_CLIPSIBLINGS

&H00000010???

排除由的hWnd标识的窗口上方的所有兄弟窗口的可见区域。

DCX_CLIPCHILDREN

&H00000008???

排除由的hWnd标识的窗口下方的所有子窗口的可见区域。

DCX_NORESETATTRS

&H00000004???

当DC释放时,不将此DC的属性重置为默认属性。

DCX_LOCKWINDOWUPDATE

&H00000400???

即使有LockWindowUpdate调用有效也可以绘制,否则将排除此窗口。用于追踪时绘图。

DCX_EXCLUDERGN

&H00000040???

由hrgnClip标识的剪辑区域从返回的DC的可见区域中排除。

DCX_INTERSECTRGN

&H00000080???

由hrgnClip识别的剪切区域与返回的DC的可见区域相交。

DCX_INTERSECTUPDATE

&H00000200???

保留;不使用。

DCX_VALIDATE

&H00200000???

保留;不使用。

 

返回值

 

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

 

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

 

Windows NT / 2000 / XP / Vista / Windows 7:要获取扩展错误信息,请调用GetLastError.

 

备注

 

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

 

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

 

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

 

无证标志

 

处理WM_NCPAINT时获取设备上下文不能按照所述进行操作。附加无证标志&H00010000 ???必须使用:

 

CASE %WM_NCPAINT

   LOCAL hdc AS DWORD

   hdc = GetDCEx(hwnd, wParam, %DCX_WINDOW OR _

                 %DCX_INTERSECTRGN OR &H00010000???)

   ' // Paint into this DC

   ReleaseDC(hwnd, hdc)

 

在Windows XP上验证。

 

引用文件 #INCLUDE Once

 

WinUser.inc(包括Windows.inc)