电竞比分网-中国电竞赛事及体育赛事平台

分享

在VB6中使用API函數(shù)實(shí)現(xiàn)矢量圖的繪制

 家住天地 2012-05-08

在VB6中使用API函數(shù)實(shí)現(xiàn)矢量圖的繪制

分類: VB6 附庸風(fēng)雅70人閱讀評(píng)論(0)收藏舉報(bào)

在VB6中繪制矢量圖并沒(méi)有想象中那么困難,其實(shí)只要使用一個(gè)增強(qiáng)型圖元文件(EMF文件)并配合3個(gè)API函數(shù)就可以實(shí)現(xiàn)矢量圖的繪制。上述的API函數(shù)分別是GetEnhMetaFile、GetEnhMetaFileHeader、PlayEnhMetaFile。

以下是上述函數(shù)的原型:

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

說(shuō)明:取得磁盤文件中包含的一個(gè)增強(qiáng)型圖元文件的圖元文件句柄

參數(shù)表:

lpszMetaFile --- String,包含了增強(qiáng)型圖元文件的一個(gè)磁盤文件的名字

返回值:Long,指向圖元文件的句柄。零表示出錯(cuò)

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

說(shuō)明:取得增強(qiáng)型圖元文件的圖元文件頭

參數(shù)表:hemf ----------- Long,指向一個(gè)增強(qiáng)型圖元文件的句柄

cbBuffer ------- Long,ENHMETAHEADER結(jié)構(gòu)的大小

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

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

說(shuō)明:在指定的設(shè)備場(chǎng)景中畫(huà)一個(gè)增強(qiáng)型圖元文件。與標(biāo)準(zhǔn)圖元文件不同,完成回放后,增強(qiáng)型圖元文件會(huì)恢復(fù)設(shè)備場(chǎng)景以前的狀態(tài)

返回值:Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError

參數(shù)表:參數(shù) 類型及說(shuō)明   hdc Long,目標(biāo)設(shè)備場(chǎng)景

hemf Long,欲描繪的增強(qiáng)型圖元文件的句柄

lpRect RECT,一個(gè)約束矩形,定義了在哪里描繪圖元文件

以下是使用以上函數(shù)實(shí)現(xiàn)矢量圖繪制的主要代碼,另外需要說(shuō)明的是上述函數(shù)只對(duì)增強(qiáng)型圖元(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'獲取圖元文件頭,主要目的是獲取結(jié)構(gòu)中有關(guān)圖元文件坐標(biāo)的信息

With lprect'設(shè)置RECT結(jié)構(gòu)成員主要用于定義了在哪里描繪圖元文件

.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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多