VB6 GDI 入門教程 2 GDI 初始化

2021-09-06 18:49:43 字數 4235 閱讀 8787

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+基礎單位就是畫素(當然可以用別的單位)

好 現在雙擊窗體,寫入下面**:

optionexplicit

dimgraphicsaslong

privatesubform_load()

initgdiplus

gdipcreatefromhdcme.hdc, graphics

endsub

privatesubform_unload(cancelasinteger)

gdipdeletegraphics graphics'釋放graphics占用的記憶體

terminategdiplus

endsub

ok,f5執行。如果沒有問題的話我們第乙個最基礎的gdi+程式已經完成了。這個基本的程式建立了乙個graphics物件,當然什麼還沒有畫呢。

通過這個程式,我們就大致了解vb6中gdi+如何初始化、關閉了。首先呢要啟動gdi+,然後要建立乙個graphics;關閉的時候也要做好掃地工作。

5.畫線

線嘛,又不是填充,根據前面說的,我們需要乙個pen。那麼如何建立pen呢?呵呵,下面的**就能建立乙個pen(追加在form_load過程中的末尾):

dimpenaslong

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程式,雖然它只畫了一條線:

optionexplicit

dimgraphicsaslong

dimpenaslong

privatesubform_load()

initgdiplus

gdipcreatefromhdcme.hdc, graphics

gdipcreatepen1 &hffff0000, 1, unitpixel, pen

gdipdrawlinei graphics, pen, 10, 10, 200, 100

endsub

privatesubform_unload(cancelasinteger)

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的基礎應用...