使用这个API函数之前应该先创建一个刷子,比如以下几种刷子:
==========
CreateBrushIndirect
VB声明
Declare Function CreatePatternBrush Lib"gdi32" Alias"CreatePatternBrush"(ByVal hBitmap As Long) As Long
说明
用指定了刷子图案的一幅位图创建一个刷子
返回值
Long,如执行成功,则返回新刷子的一个句柄;否则返回零
参数表
参数类型及说明
hBitmap Long,指向一幅位图的句柄。如指定了单色位图,文本和背景色就会在图案中使用
注解
如不再需要,请用DeleteObject函数删除刷子。也请参考CreateBrush函数,它的参数与LOGBRUSH结构的字段是对应的
==========
CreateDIBPatternBrush,CreateDIBPatternBrushPt
VB声明
Declare Function CreateDIBPatternBrush& Lib"gdi32"(ByVal hPackedDIB As Long, ByVal wUsage As Long)
Declare Function CreateDIBPatternBrushPt& Lib"gdi32"(lpPackedDIB As Any, ByVal wUsage As Long)
说明
用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
返回值
Long,如执行成功,返回指向刷子的一个句柄。零表示失败
参数表
参数类型及说明
hPackedDIB,lpPackedDIB Long,hPackedDIB是指向一个内存块的全局内存句柄。那个内存块包含了一个BITMAPINFO结构,后面跟随一幅与设备无关的位图。lpPackedDIB是具有相同配置的一个内存块的地址。如指定了单色DIB,DIB颜色就会忽略,而换用文本和背景颜色
wUsage Long,下述常数之一:
DIB_PAL_COLORS DIB颜色表,包含了当前逻辑调色板的索引
DIB_RGB_COLORS DIB颜色表,包含了32位的RGB色值
注解
编制win32应用程序的时候,最好使用CreateDIBPatternBrushPt
==========
CreateHatchBrush
VB声明
Declare Function CreateHatchBrush Lib"gdi32" Alias"CreateHatchBrush"(ByVal nIndex As Long, ByVal crColor As Long) As Long
说明
创建带有阴影图案的一个刷子(阴影图案见注解)
返回值
Long,如执行成功,返回指向新刷子的一个句柄。否则返回零。注意在不需要时,用DeleteObject清除刷子
参数表
参数类型及说明
nIndex Long,象下图那样指定一种阴影类型
crColor Long,指定刷子的RGB前景色
注解
//(图我贴不上来,你可以自己搜以下,一共六种常量,如下:HS_HORIZONTAL HS_VERTICAL HS_CROSS HS_FDIAGONAL HS_BDIAGONAL HS_DIAGCROSS)
==========
CreatePatternBrush
VB声明
Declare Function CreatePatternBrush Lib"gdi32" Alias"CreatePatternBrush"(ByVal hBitmap As Long) As Long
说明
用指定了刷子图案的一幅位图创建一个刷子
返回值
Long,如执行成功,则返回新刷子的一个句柄;否则返回零
参数表
参数类型及说明
hBitmap Long,指向一幅位图的句柄。如指定了单色位图,文本和背景色就会在图案中使用
注解
一旦刷子不再需要,记得用DeleteObject函数将其删除。不要在这个函数里使用作为DIB分区创建的位图
==========
然后选定一个刷子:
==========
SelectObject
VB声明
Declare Function SelectObject Lib"gdi32" Alias"SelectObject"(ByVal hdc As Long, ByVal hObject As Long) As Long
说明
每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以及区域等等。一次选入设备场景的只能有一个对象。选定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色及样式
返回值
Long,与以前选入设备场景的相同hObject类型的一个对象的句柄,零表示出错。如选定的对象是一个区域(Region),结果就是下列常数之一:SIMPLEREGION, COMPLEXREGION或 NULLREGION对区域进行描述, GDI_ERROR表示出错
参数表
参数类型及说明
hdc Long,一个设备场景的句柄
hObject Long,一个画笔、位图、刷子、字体或区域的句柄
注解
返回值通常用于获得选入DC的对象的原始值。绘图操作完成后,原始的对象通常选回设备场景。在清除一个设备场景前,务必注意恢复原始的对象
==========
之后调用Rectangle的API函数:
==========
Rectangle
VB声明
Declare Function Rectangle Lib"gdi32" Alias"Rectangle"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
说明
用当前选定的画笔描绘矩形,并用当前选定的刷子进行填充
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数类型及说明
hdc Long,设备场景的句柄
X1,Y1 Long,指定矩形左上角位置
X2,Y2 Long,指定矩形右下角位置
==========
类似的还有
==========
Ellipse
VB声明
Declare Function Ellipse Lib"gdi32" Alias"Ellipse"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
说明
描绘一个椭圆,由指定的矩形围绕。椭圆用当前选择的画笔描绘,并用当前选择的刷子填充
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数类型及说明
hdc Long,设备场景的句柄
X1,Y1 Long,约束矩形采用逻辑坐标的左上角位置
X2,Y2 Long,约束矩形采用逻辑坐标的右下角位置
==========
Arc,ArcTo
VB声明
Declare Function Arc& Lib"gdi32"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long)
Declare Function ArcTo& Lib"gdi32"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long)
说明
象注解中那样画一个圆弧。(X1,Y1)和(X2,Y2)定义了椭圆的一个范围(约束)矩形。从矩形中心点到点(X3,Y3)的一条线段与椭圆的交点标志着圆弧的起点。而到(X4,Y4)的一条线与椭圆的交点则标志着圆弧的终点。ArcTo函数会将当前画笔位置设为弧的终点,而Arc函数则不会对当前的画笔位置造成影响
返回值
Long,非零表示成功,零表示失败
参数表
参数类型及说明
hdc Long,一个显示场景的句柄
X1,Y1 Long,指定围绕椭圆的一个矩形的左上角位置
X2,Y2 Long,指定围绕椭圆的一个矩形的右下角位置
X3,Y3 Long,指定圆弧起点
X4,Y4 Long,指定圆弧终点
注解
在win16和win95中,约束矩形的宽度和高度必须在3——32766间。绘图方向肯定是逆时针方向。
在win nt中:绘图方向由SetArcDirection函数决定。默认为逆时针方向
==========
Chord
VB声明
Declare Function Chord Lib"gdi32" Alias"Chord"(ByVal As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
说明
象注解中那样画一个弦。(X1,Y1)和(X2,Y2)定义了椭圆的一个范围(约束)矩形。点(X3,Y3)和点(X4,Y4)定义了一条线段。该线段与椭圆之间的区域就是“弦”
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数类型及说明
hdc Long,一个显示场景的句柄
X1,Y1 Long,指定围绕椭圆的一个矩形的左上角位置
X2,Y2 Long,指定围绕椭圆的一个矩形的右下角位置
X3,Y3 Long,指定与椭圆相交的一条线的一个点
X4,Y4 Long,指定与椭圆相交的一条线的另一个点
注解
在win16和win95中,约束矩形的宽度和高度必须在3——32766个单位之间。请参考Arc获得更详细的图例
==========
LineTo
VB声明
Declare Function LineTo Lib"gdi32" Alias"LineTo"(ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
说明
用当前画笔画一条线,从当前位置连到一个指定的点。这个函数调用完毕,当前位置变成x,y点
返回值
Long,非零表示成功,零表示失败
参数表
参数类型及说明
hdc Long,设备场景的句柄
x,y Long,线段终点位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部分
注解
如重复调用这个函数和一个几何画笔,从而创建一系列线段,那么除非在一个路径的场景中调用,否则不会认为这些线段已结合到一起
==========
Pie
VB声明
Declare Function Pie Lib"gdi32" Alias"Pie"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
说明
象注解里那样画一个饼图,X1,Y1,X2,Y2指定椭圆的一个约束矩形。从矩形的中心分别向X3,Y3和X4,Y4画一条线,这两条线与椭圆的交点定义了饼图占据椭圆的面积
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数类型及说明
hdc Long,指定一个显示场景的句柄
X1,Y1 Long,指定椭圆约束矩形的左上角位置
X2,Y2 Long,指定椭圆约束矩形的右下角位置
X3,Y3 Long,指定饼图的一个斜边
X4,Y4 Long,指定饼图的另一个斜边
注解
在win95和win16中,约束矩形的宽度和高度必须在3-32766之间
参考Arc函数
==========
最后还要DeleteObject
==========
DeleteObject
VB声明
Declare Function DeleteObject Lib"gdi32" Alias"DeleteObject"(ByVal hObject As Long) As Long
说明
用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
返回值
Long,非零表示成功,零表示失败
参数表
参数类型及说明
hObject Long,一个GDI对象的句柄
注解
不要删除一个已选入设备场景的画笔、刷子或位图。如删除以位图为基础的阴影(图案)刷子,位图不会由这个函数删除——只有刷子被删掉
==========
画图的函数太多了,无法一一写下来,也欢迎您和我交流,共同进步
再给您一个例子,运行后点击窗口,会在Form1上画一个Rectangle:
==========
Option Explicit
Private Declare Function CreateSolidBrush Lib"gdi32"(ByVal crColor As Long) As Long
Private Declare Function Rectangle Lib"gdi32"(ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib"gdi32"(ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib"gdi32"(ByVal hDC As Long, ByVal hObject As Long) As Long
Private Sub Form_Click()
Dim TempBrush As Long
Dim tOB As Long
'创建一个刷子
TempBrush= CreateSolidBrush(RGB(0, 0, 0))
'选定一个刷子
tOB= SelectObject(Me.hDC, TempBrush)
SelectObject Me.hDC, tOB
'画图
Rectangle Me.hDC, 15, 15, 50, 50
'删除对象
DeleteObject TempBrush
End Sub
关于dc.rectangle的内容到此结束,希望对大家有所帮助。