田慕晨
摘要:SDK中集成了多種繪圖函數(shù),給Windows編程人員提供了便利。本文將針對(duì)其中四種(Polyline,PolyPolyline,Polygon,PolyPolygon)作詳細(xì)說(shuō)明,并對(duì)比其調(diào)用方法和實(shí)現(xiàn)功能的不同。并提供自己編寫(xiě)這四種函數(shù)的思路,經(jīng)試驗(yàn),效果與SDK中函數(shù)效果基本一致。
關(guān)鍵詞:SDK;繪圖函數(shù);Windows編程
一、Polyline
頂點(diǎn)數(shù)組有7個(gè)元素,分別是一個(gè)三角形的三個(gè)頂點(diǎn),一個(gè)方形的四個(gè)頂點(diǎn)(其余函數(shù)測(cè)試都使用同一個(gè)頂點(diǎn)數(shù)組)。調(diào)用Polyline,Polyline只能畫(huà)一條折線(xiàn),即將7個(gè)頂點(diǎn)依次連接,若頂點(diǎn)個(gè)數(shù)參數(shù)設(shè)為3,則只連頂點(diǎn)數(shù)組的前三個(gè)點(diǎn)。
二、PolyPolyline
PolyPolyline可以畫(huà)多條折線(xiàn)。設(shè)定好PolyPolyline的每條線(xiàn)頂點(diǎn)個(gè)數(shù)數(shù)組為{3,4},則前3個(gè)點(diǎn)和后4個(gè)點(diǎn)分別被連成兩條線(xiàn)。
三、Polygon
Polygon畫(huà)一個(gè)閉合的多邊形并填色。首先此函數(shù)將7個(gè)點(diǎn)連接并自動(dòng)將最后一個(gè)點(diǎn)和第一個(gè)點(diǎn)相連形成閉合圖形,再填色。
四、PolyPolygon
PolyPolygon畫(huà)多個(gè)多邊形并填色。與PolyPolyline一樣,設(shè)定好一個(gè)多邊形用幾個(gè)頂點(diǎn)和多邊形個(gè)數(shù)的參數(shù),PolyPolygon連接第一組頂點(diǎn),首尾相連并填充,再連接第二組頂點(diǎn),首尾相連并填充。
五、編寫(xiě)繪圖函數(shù)
1.MyPolyline
仿照Polyline的參數(shù)和返回,三個(gè)參數(shù)分別是hdc,CONST POINT *apt(POINT類(lèi)型數(shù)組地址,頂點(diǎn)數(shù)組信息),csz(頂點(diǎn)個(gè)數(shù)),返回空。
數(shù)組地址apt為數(shù)組內(nèi)第一個(gè)元素的地址,可以直接apt+i使指針在數(shù)組內(nèi)移動(dòng)。由于數(shù)組是結(jié)構(gòu)體類(lèi)型的,可以以地址訪(fǎng)問(wèn)結(jié)構(gòu)體內(nèi)成員,即apt->y。
函數(shù)編寫(xiě)思路簡(jiǎn)單,先用MoveToEx函數(shù)把畫(huà)筆放到第一個(gè)頂點(diǎn)處,再for循環(huán)頂點(diǎn)個(gè)數(shù)-1次,每次都LineTo下一個(gè)頂點(diǎn)。
2.MyPolyPolyline
仿照PolyPolyline的參數(shù)和返回,四個(gè)參數(shù)分別是hdc,CONST POINT *apt(POINT類(lèi)型數(shù)組地址,頂點(diǎn)數(shù)組信息),CONST DWORD *asz(DWORD類(lèi)型數(shù)組地址,每條折線(xiàn)的頂點(diǎn)個(gè)數(shù)),DWORD csz(折線(xiàn)條數(shù)),返回空。
apt使用與Polyline相同。asz也是數(shù)組地址,也表示該數(shù)組第一個(gè)元素的地址,但這個(gè)數(shù)組里的元素不是結(jié)構(gòu)體,要用*取出,asz+i指針移動(dòng),*(asz + i)取出指針指向的元素值。
函數(shù)體是一個(gè)兩層嵌套的for循環(huán),循環(huán)前先定義i、j都為0,i控制指向頂點(diǎn)數(shù)組里第幾個(gè)點(diǎn),j控制在畫(huà)第幾條線(xiàn)。第一層循環(huán)是折線(xiàn)條數(shù)循環(huán),循環(huán)折線(xiàn)條數(shù)次,MoveToEx把筆抬起放到下一個(gè)起始頂點(diǎn),并讓i++,讓內(nèi)層循環(huán)從下一個(gè)點(diǎn)開(kāi)始連。內(nèi)層循環(huán)是每條線(xiàn)內(nèi)的頂點(diǎn)連線(xiàn)循環(huán),循環(huán)次數(shù)由asz數(shù)組內(nèi)的值決定。也可以?xún)?nèi)層調(diào)Polyline實(shí)現(xiàn)。3.MyPolyPolygon
仿照PolyPolyline的參數(shù)和返回,四個(gè)參數(shù)分別是hdc,CONST POINT *apt(POINT類(lèi)型數(shù)組地址,頂點(diǎn)數(shù)組信息),CONST INT *asz(INT類(lèi)型數(shù)組地址,每條折線(xiàn)的頂點(diǎn)個(gè)數(shù)),DWORD csz(折線(xiàn)條數(shù)),返回空。
使用均同MyPolyPolyline。
函數(shù)體是一個(gè)for循環(huán),循環(huán)內(nèi)調(diào)用Polygon。Polygon的頂點(diǎn)數(shù)組參數(shù)是apt + i,i每次循環(huán)完加asz數(shù)組中這個(gè)多邊形的頂點(diǎn)數(shù),apt + i就移動(dòng)到下一個(gè)多邊形的第一個(gè)頂點(diǎn)處;Polygon的頂點(diǎn)數(shù)參數(shù)是*(asz+j)),j每次循環(huán)加1,即依次遍歷asz數(shù)組的值。
參考文獻(xiàn)
[1]云昌欽,袁灝.Microsoft Windows環(huán)境與編程基礎(chǔ)[Z].
(作者單位:山東大學(xué)(威海)通信工程)