VB 版 (精华区)
发信人: bloom (小石头长大了), 信区: VB
标 题: 设备场景函数(2)
发信站: 哈工大紫丁香 (2000年07月23日16:22:18 星期天), 转信
目录
ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域
ExtCreateRegion 根据世界转换修改区域
ExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区
FillRgn 用指定刷子填充指定区域
FrameRgn 用指定刷子围绕指定区域画一个外框
GetBoundsRect 获取指定设备场景的边界矩形
GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形
GetClipRgn 获取设备场景当前剪裁区
GetDC 获取指定窗口的设备场景
GetDCEx 为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项
GetDCOrgEx 获取指定设备场景起点位置(以屏幕坐标表示)
GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息
GetGraphicsMode 确定是否允许增强图形模式(世界转换)
GetMapMode 为特定设备场景调入映象模式
GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区
GetRgnBox 获取完全包含指定区域的最小矩形
________________________________________________
ExcludeUpdateRgn
VB声明
Declare Function ExcludeUpdateRgn Lib "user32" Alias "ExcludeUpdateRgn" (ByV
al hdc As Long, ByVal hwnd As Long) As Long
说明
从专用设备场景剪裁区去掉指定窗口的刷新区域。这防止对无效区绘图(该无效区将推
迟一点再刷新)
返回值
Long,见ExcludeClipRect函数返回值
参数表
参数 类型及说明
hdc Long,设备场景,其剪裁区将被修改以排除hwnd窗口的刷新区
hwnd Long,窗口句柄
在vb中使用
设您要完成一个较长或复杂的绘图操作,该函数可允许您避免画到现在没有遮盖而随后
即将画的区域。这可提高性能并消除闪烁效果
___________________________________________________
ExtCreateRegion
VB声明
Declare Function ExtCreateRegion Lib "gdi32" Alias "ExtCreateRegion" (lpXfor
m As xform, ByVal nCount As Long, lpRgnData As RGNDATA) As Long
说明
根据世界转换修改区域
返回值
Long,执行成功为已转换区域的句柄,失败则为0
参数表
参数 类型及说明
lpXform xform,将用于由lpRgnData指定区域的转换
nCount Long,lpRgnData数据结构或缓冲区的字节数
lpRgnData RGNDATA,用GetRegionData定义区域时载入的一个结构
注解
在win95下,只有缩放和平移转换才能用该函数。它不支持旋转和剪切
________________________________________________________________
ExtSelectClipRgn
VB声明
Declare Function ExtSelectClipRgn Lib "gdi32" Alias "ExtSelectClipRgn" (ByVa
l hdc As Long, ByVal hRgn As Long, ByVal fnMode As Long) As Long
说明
将指定区域组合到设备场景的当前剪裁区
返回值
Long,返回下列常数之一,以描述所得剪裁区:
COMPLEXREGION:区域边界互相交叠
SIMPLEREGION:区域边界没有互相交叠
NULLREGION:区域为空
ERRORAPI:发生了错误
参数表
参数 类型及说明
hdc Long,剪裁区将被修改的设备场景的句柄
hRgn Long,源区域句柄。若fnMode为RGN_COPY,它可为NULL
fnMode Long,下列常数之一:
RGN_AND 新剪裁区包括即属hRgn又属当前剪裁区的部分
RGN_COPY 新剪裁区为hRgn区域
RGN_DIFF 新剪裁区为当前剪裁区除掉其在hRgn区内的部分
RGN_OR 新剪裁区包括属hRgn或当前属当前剪裁区的部分
RGN_XOR 新剪裁区包括属hRgn或当前属当前剪裁区的部分,但要除去同属两者的部分
注解
本函数对hRgn区域没有影响,执行后可毁去(destroy)该区域
_________________________________________________________
FillRgn
VB声明
Declare Function FillRgn Lib "gdi32" Alias "FillRgn" (ByVal hdc As Long, ByV
al hRgn As Long, ByVal hBrush As Long) As Long
说明
用指定刷子填充指定区域
返回值
Long,执行成功为非零值,失败则为0
参数表
参数 类型及说明
hdc Long,设备场景句柄
hRgn Long,以数据设备坐标填充的区域句柄
hBrush Long,要用的刷子的句柄
____________________________________
FrameRgn
VB声明
Declare Function FrameRgn Lib "gdi32" Alias "FrameRgn" (ByVal hdc As Long, B
yVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight
As Long) As Long
说明
用指定刷子围绕指定区域画一个外框
返回值
Long,执行成功返回非零值,失败为0
参数表
参数 类型及说明
hdc Long,设备场景句柄
hRgn Long,将数据设备坐标填充的区域句柄
hBrush Long,将用的刷子句柄
nWidth Long,垂直边框宽度(以设备单元为单位)
nHeight Long,水平边框高度(以设备单元为单位)
_____________________________________________
GetBoundsRect
VB声明
Declare Function GetBoundsRect Lib "gdi32" Alias "GetBoundsRect" (ByVal hdc
As Long, lprcBounds As RECT, ByVal flags As Long) As Long
说明
获取指定设备场景的边界矩形。每个设备场景都有一个边界矩形,程序员可用它来堆放
表示当前图象边界的信息
返回值
Long,出错为0,否则为下列常数之一:
DCB_SET:边界矩形非空
DCB_RESET:边界矩形为空
DCB_ENABLE:边界矩形正被堆放
DCB_DISABLE:边界矩形当前没有被堆放
参数表
参数 类型及说明
hdc Long,边界矩形对应的设备场景
lprcBounds RECT,装载设备场景hdc的当前边界矩形
flags Long,可设为常数DCB_RESET以清除边界矩形,否则设为零
注解
详情参考SetBoundsRect
_________________________________
GetClipBox
VB声明
Declare Function GetClipBox Lib "gdi32" Alias "GetClipBox" (ByVal hdc As Lon
g, lpRect As RECT) As Long
说明
获取完全包含指定设备场景剪裁区的最小矩形
返回值
Long,返回下列常数之一,以描述所得剪裁区:
COMPLEXREGION:区域边界互相交叠
SIMPLEREGION:区域边界没有互相交叠
NULLREGION:区域为空
ERRORAPI:发生了错误
参数表
参数 类型及说明
hdc Long,设备场景句柄
lpRect RECT,装载包含设备场景剪裁区的矩形
______________________________________________
GetClipRgn
VB声明
Declare Function GetClipRgn Lib "gdi32" Alias "GetClipRgn" (ByVal hdc As Lon
g, ByVal hRgn As Long) As Long
说明
获取设备场景当前剪裁区
返回值
Long,下列常数之一:
1——执行成功,剪裁区存在
0——执行成功,没有定义剪裁区
-1——出错
参数表
参数 类型及说明
hdc Long,想要访问的设备场景剪裁区
hRgn Long,已存在的区域句柄。该区域将被设为设备场景当前剪裁区
注解
hRgn装载剪裁区拷贝。它后面的改变不影响剪裁区。该函数只能载入由应用程序设置的
剪裁区,那些由BeginPaint一类函数设置的内部剪裁区不能被函数访问
____________________________________________
GetDC
VB声明
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Lo
ng
说明
获取指定窗口的设备场景
返回值
Long,指定窗口的设备场景句柄,出错则为0
参数表
参数 类型及说明
hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
注解
若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属
窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的
hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场
景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设
置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CL
ASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为
默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
____________________________________________________________
GetDCEx
VB声明
Declare Function GetDCEx Lib "user32" Alias "GetDCEx" (ByVal hwnd As Long, B
yVal hrgnclip As Long, ByVal fdwOptions As Long) As Long
说明
为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项
返回值
Long,执行成功为指定窗口设备场景句柄。出错则为0
参数表
参数 类型及说明
hwnd Long,窗口句柄
hrgnclip Long,窗口剪裁区
fdwOptions Long,标志字。根据下列常数设置各位:
DCX_CACHE 不管窗口类的样式,从windows缓存获取设备场景
DCX_CLIPCHILREN 所有可见的子窗口区都要从DC的剪裁区中排除
DCX_CLIPSIBLINGS 窗口hWnd上的所有可见兄弟窗口都要从DC的剪裁区中排除
DCX_EXCLUDERGN 从DC剪裁区中排除由hrgnclip指定的区域
DCX_EXCLUDEUPDATE 从设备场景剪裁区中排除刷新区域
DCX_INTERSECTRGN 由hrgnclip指定的区域与设备场景剪裁区相交
DCX_INTERSECTUPDATE 指定区域与设备场景刷新区域相交
DCX_LOCKWINDOWUPDATE 该标志为允许向窗口绘图,即使它由于LockWindowUpdate的调用
被锁住
DCX_NORESETATTRS 设备场景释放后不被重置为默认状态
DCX_PARENTCLIP 放弃CS_PARENTDC类样式设置。DC的起点设为hWnd窗口的左上角
DCX_WINDOW A device context is returned for the entire window rectangle rath
er than just the client area of the window
DCX_VALIDATE Combine with DCX_INTERSECTUPDATE, validates the clipping region
注解
若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属
窗口或类专有。这时,设备场景状态不能从初值修改。vb的窗体和控件通常是这种情况
。否则,置DCX_CACHE位以从通用windows缓冲区恢复设备场景。若不置该位,则函数返
回0。DC的状态位默认设置。从缓存获取的设备场景用过后要用ReleaseDC函数释放以防
止系统死锁,因为windows只有5个缓存DC可用
其他情况参见GetDC函数注解
Top
_________________________________________________________
GetDCOrgEx
VB声明
Declare Function GetDCOrgEx Lib "gdi32" Alias "GetDCOrgEx" (ByVal hdc As Lon
g, lpPoint As POINTAPI) As Long
说明
获取指定设备场景起点位置(以屏幕坐标表示)。例如,设DC起点为窗口客户区左上角
,则该函数返回值为该角在屏幕中的位置(以屏幕像素坐标表示)
返回值
Long,执行成功为非零值,否则为零
参数表
参数 类型及说明
hdc Long,设备场景句柄
lpPoint POINTAPI,装载设备场景起点的屏幕坐标
示例:在窗体模块中使用时,该代码装载窗体客户区左上角坐标(以屏幕坐标表示)。
它也是窗体hDC属性的起点
Dim dl&
Dim pt As POINTAPI
dl& = GetDCOrgEx(hDC, pt)
___________________________________________________________
GetDeviceCaps
VB声明
Declare Function GetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hdc
As Long, ByVal nIndex As Long) As Long
说明
根据指定设备场景代表的设备的功能返回信息
返回值
Long,参见GetDeviceCaps索引表
参数表
参数 类型及说明
hdc Long,要查询其设备的信息的设备场景
nIndex Long,根据GetDeviceCaps索引表所示常数确定返回信息的类型
________________________________________________________________
GetGraphicsMode
VB声明
Declare Function GetGraphicsMode Lib "gdi32" Alias "GetGraphicsMode" (ByVal
hdc As Long) As Long
说明
确定是否允许增强图形模式(世界转换)
返回值
Long,下列常数之一:
GM_COMPATIBLE:图形模式兼容win16
GM_ADVANCED:允许世界转换
参数表
参数 类型及说明
hdc Long,其模式将被测试的设备场景
注解
只有Windows NT支持世界转换
____________________________________
GetMapMode
VB声明
Declare Function GetMapMode Lib "gdi32" Alias "GetMapMode" (ByVal hdc As Lon
g) As Long
说明
为特定设备场景调入映象模式
返回值
Long,当前设备场景的映象模式。关于映象模式的说明参见SetMapMode函数
参数表
参数 类型及说明
hdc Long,其模式将被测试的设备场景
_________________________________________
GetRegionData
VB声明
Declare Function GetRegionData Lib "gdi32" Alias "GetRegionDataA" (ByVal hRg
n As Long, ByVal dwCount As Long, lpRgnData As RgnData) As Long
说明
装入描述一个区域信息的RgnData结构或缓冲区
返回值
Long,如果结构足够大以装入区域的数据,返回1;出错时返回0。如果lpRgnData不够大
,不能装入区域数据,则返回需要的结构大小
参数表
参数 类型及说明
hRgn Long,包含信息的区域的句柄
dwCount Long,RgnData结构的大小
lpRgnData RgnData,这个结构用以装入区域信息
注解
RgnData是一个描述区域的定长结构。Buffer是存放区域数据的缓冲区。缓冲区实际需要
的大小取决于区域的复杂程度(显然,1字节是永远不够的)。有两个选择:
1、将RgnData重定义为永远不会用到的一个大尺寸。这是需要的,因为vb不允许动态重
定义结构的大小
2、分配一个字节数组并用它来代替RgnData结构。这要求将As RgnData换为As Byte来改
变函数的API声明,并且传送字节数组的第一个元素
如果以后要访问RGNDATAHEADER结构的元素,需要用一个内存拷贝例程将数据从缓冲区拷
贝到一个特别定义的RGNDATAHEADER结构中
____________________________________________
GetRgnBox
VB声明
Declare Function GetRgnBox Lib "gdi32" Alias "GetRgnBox" (ByVal hRgn As Long
, lpRect As RECT) As Long
说明
获取完全包含指定区域的最小矩形
返回值
Long,下列常数之一,以描述当前剪裁区:
COMPLEXREGION:该区域有互相交叠的边界
SIMPLEREGION:该区域边界没有互相交叠
NULLREGION:区域为空
ERRORAPI:发生了错误
参数表
参数 类型及说明
hRgn Long,区域句柄
lpRect RECT,矩形结构,装载完全包含指定区域的矩形
又臭,又硬。
小石头
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.233.140]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.446毫秒