在VB6中使用API函数实现矢量图的绘制。

在VB6中绘制矢量图并没有想象中那么困难,其实只要使用一个增强型图元文件(EMF文件)并配合3个API函数就可以实现矢量图的绘制。上述的API函数分别是GetEnhMetaFile、GetEnhMetaFileHeader、PlayEnhMetaFile。

 

以下是上述函数的原型:

(1)Declare Function GetEnhMetaFile Lib "gdi32" Alias "GetEnhMetaFileA" (ByVal lpszMetaFile As String) As Long

说明:取得磁盘文件中包含的一个增强型图元文件的图元文件句柄

参数表:

lpszMetaFile --- String,包含了增强型图元文件的一个磁盘文件的名字

返回值:Long,指向图元文件的句柄。零表示出错

 

(2)Declare Function GetEnhMetaFileHeader Lib "gdi32" Alias "GetEnhMetaFileHeader" (ByVal hemf As Long, ByVal cbBuffer As Long, lpemh As ENHMETAHEADER) As Long

说明:取得增强型图元文件的图元文件头

参数表:hemf ----------- Long,指向一个增强型图元文件的句柄

cbBuffer ------- Long,ENHMETAHEADER结构的大小

lpemh ---------- ENHMETAHEADER

 

(3)Declare Function PlayEnhMetaFile Lib "gdi32" Alias "PlayEnhMetaFile" (ByVal hdc As Long, ByVal hemf As Long, lpRect As RECT) As Long

说明:在指定的设备场景中画一个增强型图元文件。与标准图元文件不同,完成回放后,增强型图元文件会恢复设备场景以前的状态

返回值:Long,非零表示成功,零表示失败。会设置GetLastError

参数表:参数 类型及说明   hdc Long,目标设备场景

hemf Long,欲描绘的增强型图元文件的句柄

lpRect RECT,一个约束矩形,定义了在哪里描绘图元文件

 

以下是使用以上函数实现矢量图绘制的主要代码,另外需要说明的是上述函数只对增强型图元(EMF)有效,并不支持(WMF)。

 

Private Sub Form_Activate()
    Picture1.Cls'清除图形
    Dim ret
    If Dir(App.Path & "/map.emf") <> "" Then'判断文件是否存在
        hwd = GetEnhMetaFile(App.Path & "/map.emf")'获取图元文件句柄
        GetEnhMetaFileHeader hwd, Len(lp), lp'获取图元文件头,主要目的是获取结构中有关图元文件坐标的信息

        With lprect'设置RECT结构成员主要用于定义了在哪里描绘图元文件

            .Left = 0
            .Top = 0
            .Right = lp.rclBounds.Right
            .Bottom = lp.rclBounds.Bottom
        End With
        ret = PlayEnhMetaFile(Picture1.hdc, hwd, lprect)'绘制绘图元文件
        P = 1
        Check1.value = 0
        first
    Else
        MsgBox "缺失地图文件map.emf"
        End
    End If

End Sub

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页