vb6 gdi+ 入門教程[2] gdi+初始化
標籤: gdiplus,vb
分類: tutorial,vb6 gdi+
現在先讓我們了解下gdi+的繪圖機制。
1.初始化、關閉gdi+
我們需要對gdi+進行初始化,才能使用它的各種功能。如果沒有初始化,那麼vb6就會莫名其妙的崩潰。呵呵。
當然程式結束了我們還要關閉gdi+釋放記憶體。
2.graphics
graphics是gdi+基礎。首先我們需要乙個圖形物件graphics(可以看作是畫板),我們所有的東西都要畫在這個上面。那麼如何顯示呢?不要急,我們可以通過gdi+內建函式從乙個物件的dc(裝置描述表)上建立graphics。這樣我們操作graphics的時候就會顯示在物件上。當然我們還可以從物件的hwnd中建立;在.net中也可以從gdi+的影象(image)中建立(直接操作在影象上)。
3.繪圖工具
有了畫板,我們還要畫筆、畫刷才能畫畫 – -。畫筆畫刷呢,在gdi+中就叫做pen、brush。畫筆pen只能畫乙個輪廓(畫線),而畫刷可以對乙個東西進行填充(刷子)。這個就是乙個基礎 呵呵,很簡單吧。
4.建立第乙個vb6的 gdi+ 程式
首先,我們新增下gdi+模組;然後我們需要對窗體(以後可以是其它容器)屬性進行設定:autoredraw=true,開啟自動重繪;再把scalemode設定成3(pixel畫素)(注:這麼做是為了ui時候的統一,這一步是否執行對於gdi+直接繪製的結果不會有影響),因為gdi+基礎單位就是畫素(當然可以用別的單位)
好 現在雙擊窗體,寫入下面**:
option
explicit
dim
graphics
as
long
private
sub
form_load()
initgdiplus
gdipcreatefromhdc
me
.hdc, graphics
end
sub
private
sub
form_unload(cancel
as
integer
)
gdipdeletegraphics graphics
'釋放graphics占用的記憶體
terminategdiplus
end
sub
ok,f5執行。如果沒有問題的話我們第乙個最基礎的gdi+程式已經完成了。這個基本的程式建立了乙個graphics物件,當然什麼還沒有畫呢。
通過這個程式,我們就大致了解vb6中gdi+如何初始化、關閉了。首先呢要啟動gdi+,然後要建立乙個graphics;關閉的時候也要做好掃地工作。
5.畫線
線嘛,又不是填充,根據前面說的,我們需要乙個pen。那麼如何建立pen呢?呵呵,下面的**就能建立乙個pen(追加在form_load過程中的末尾):
dim
pen
as
long
gdipcreatepen1 &hffff0000, 1, unitpixel, pen
這裡已經新建了乙個pen。為什麼是gdipcreatepen1而不是gdipcreatepen2什麼的呢?你可以在**裡面輸入「mgdip.」這樣就列出了所有的gdi+函式。通過物件瀏覽器可以得知pen2是根據brush來建立pen的,現在不用。
&hffff0000:這裡就是乙個16進製制的argb (alpha,red,green,blue——透明,紅色,綠色,藍色程度,255(&hff)是完全,0(&h0)是完全不) 的資料。當然你可以輸入10進製,只是16進製制很方便,2個16進製制位就是乙個位元組,如&hffff0000就代表乙個透明度是255(不透明),顏色是紅色的一種顏色。如果你知道一些繪圖技巧就很容易用這個去寫 呵呵~。同時我們還能看到gdi+過程是傳址的,把pen傳進去。為什麼不用函式返回值傳出來呢?因為函式返回值要傳出乙個狀態,執行結果的標誌。一般如果成功了那麼就返回的是0(ok)。
好,現在已經拿到筆了,接下來就是用這個筆去畫線了。通過查詢mgdip的宣告(請學會自主探索)可知有這麼個api:gdipdrawline,它的x1y1,x2y2是single型,繼續找又發現gdipdrawlinei,它的座標值都是long型(我們一般用不到single,因此我們一般用gdipdrawlinei就行了)。根據它的引數名字 亂猜都能猜出來哪個引數代表什麼了,於是我隨便寫了一句:gdipdrawlinei graphics, pen, 10, 10, 200, 100。注意:你需要把graphics和pen傳進去,否則怎麼畫呢?不告訴它畫在**~~,後面4個引數分別對應:起始點x、起始點y、終點x、終點y的座標。當然掃地工作也要做好,刪除pen的語句是gdipdeletepen;引數很簡單,傳pen進去即可。
綜合起來,於是我們有了第一段真正繪製的gdi+ vb6程式,雖然它只畫了一條線:
option
explicit
dim
graphics
as
long
dim
pen
as
long
private
sub
form_load()
initgdiplus
gdipcreatefromhdc
me
.hdc, graphics
gdipcreatepen1 &hffff0000, 1, unitpixel, pen
gdipdrawlinei graphics, pen, 10, 10, 200, 100
end
sub
private
sub
form_unload(cancel
as
integer
)
gdipdeletepen pen
'刪除這個筆(pen)
gdipdeletegraphics graphics
'釋放graphics占用的記憶體
ok,f5執行。紅線沒有出來?^_^……注意了 我們是在load中繪製的。gdi+繪製與vb自己語句繪製一樣。我們需要讓他自動重繪(窗體的autoredraw=true)或者放到paint裡面:)
注:如果你不是在load事件中繪製的東西,並且form的autoredraw是true,那麼別忘記全部畫完後refresh(例如 me.refresh)一下。因為vb的autoredraw的機制就是這樣。但是開啟autoredraw比較好,因為這樣可以獲得更快的繪製速度;全部繪製完一次性重新整理還能避免閃爍啥的問題。
HTML入門教程6
總結 div 標籤定義 html 文件中的乙個分隔區塊或者乙個區域部分。div 標籤常用於組合塊級元素,以便通過 css 來對這些元素進行格式化。margin 10px 5px 15px margin 10px 5px margin 10px 屬性值值 描述auto 瀏覽器計算外邊距。length ...
SHELL入門教程 6 環境
shell入門教程 1 shell基礎 justkk的專欄 部落格頻道 csdn.net shell入門教程 2 變數和引數 justkk的專欄 部落格頻道 csdn.net shell入門教程 3 命令編輯 justkk的專欄 部落格頻道 csdn.net shell入門教程 4 作業控制 jus...
CSS入門教程
css是 cascading style sheets 的簡稱,中文翻譯為 串接樣式表 也有人翻譯為 樣式表 css用以作為網頁的排版和風格設計,在web標準建站中,對css的熟悉和使用是相當重要的乙個內容。css的作用是彌補html的不足,讓網頁的設計更為靈活。這個文章只是為您介紹css的基礎應用...