directx7.0使用心得(1)
directx 7.0終於支援vb了,讓我們這些vb的愛好者也能享受到directx帶來的便利,現在我在這裡提出使用directdraw的心得。使用directdraw時可以不用安裝directx7.0的sdk,只要確定有裝directx7.0就可以了。
現在我們實際來使用directdraw:
在「工程(project)」裡點選「設定引用專案」,來引用directx物件。
接著將「directx 7 for visual basic type library」的那一行打勾,就可以開始使用directx了。
我們首先得建立directdraw物件,先宣告乙個direct物件和乙個directdraw物件:
dim objdx as new directx7
dim objdd as directdraw7
接下來是使用directdrawcreate函式來建立directdraw物件:
set objdd = objdx.directdrawcreate("")
然後必須設定是視窗模式還是全螢幕模式:
call objdd.setcooperativelevel(me.hwnd, ddscl_fullscreen or ddscl_allowmodex or ddscl_exclusive)
第乙個引數是設定directdraw的視窗是那乙個,填入視窗的handle**而後面的引數是設定具備的能力,可以不止乙個,使用or組合起來。
ddscl_fullscreen 使用全螢幕(必須和ddscl_exclusive一起用)
ddscl_allowmodex 使用modex模式
ddscl_exclusive 使用獨佔模式
ddscl_normal 使用windows的程式視窗
ddscl_nowindowchanges 禁止改變視窗大小
---------------
設定完視窗模式或全螢幕模式後,如果你是設定成全螢幕模式的話(也就是獨佔模式),接著就必須設定顯示模式。
objdd.setdisplaymode 640, 480, 16, 0, ddsdm_default
引數中的640,480指的是640x480的模式,而16指的是16萬色,如果是8的話則是256色,想改變顯示模式的話只要改變這三個變數就可以了,一般常用的模式有:
320x200 16萬
320x240 256
640x480 256
640x480 16萬
su***ce簡介:
su***ce就是directdraw用的顯示記憶體,影象就是要畫在su***ce上面,一般來說有分成幾種型別。
primary su***ce 螢幕上可以看到的顯示記憶體,影象畫在上面就能顯示在螢幕上。
backbuffer su***ce 這是乙個能跟primary su***ce作快速切換的su***ce。
offscreen su***ce 這是乙個螢幕上看不見的su***ce,可以用來存放影象。
我們現在就先來介紹建立primary su***ce的方法,首先得宣告乙個su***ce物件和乙個ddsu***cedesc結構。
dim objddprimsurf as directdrawsu***ce7
dim ddsd1 as ddsu***cedesc2
'ddsu***cedesc主要是記錄乙個su***ce的結構,像是su***ce的高度、寬度之類的,建立乙個primary su***ce通常只要填入ddscaps就可以了。
ddsd1.lflags = ddsd_caps '設定ddsu***cedesc結構中的ddscaps有效。
ddsd1.ddscaps.lcaps = ddscaps_primarysu***ce '設定要建立的是primary suface。
set objddprimsurf = objdd.createsu***ce(ddsd1) '呼叫createsu***ce後即建立完成。
'offscreen su***ce的建立法則是要設定ddsu***cedesc結構中的ddscaps、dwheight、dwwidth。
dim objddoffsurf as directdrawsu***ce7
dim ddsd1 as ddsu***cedesc2
ddsd1.lflags = ddsd_caps or ddsd_height or ddsd_width
'設定ddscaps、lheight、lwidth有效
ddsd1.ddscaps.lcaps = ddscaps_offscreenplain '設定要建立offscreen su***ce
ddsd1.lwidth = 640 '設定su***ce的寬度
ddsd1.lheight = 480 '設定su***ce的長度
set objddoffsurf = objdd.createsu***cefromfile("img1.bmp", ddsd1)
'offscreen su***ce建立完成並把img.bmp圖檔讀取到offscreen su***ce裡面。
一般來說不會直接在primary su***ce上直接畫圖,我通常都是先在backbuffer su***ce上畫,再利用切換的功能將primary su***ce和backbuffer su***ce交換,所以在這裡介紹backbuffer su***ce的建立方法,由於要跟primary su***ce一起建立,所以primary su***ce的建立方法也就有點不同。
dim objddprimsurf as directdrawsu***ce7
dim objddbacksurf as directdrawsu***ce7
dim ddsd1 as ddsu***cedesc2
ddsd1.lflags = ddsd_caps or ddsd_backbuffercount
'設定ddscaps和lbackbuffercount有效
ddsd1.lbackbuffercount = 1 '設定backbuffer su***ce的數量
ddsd1.ddscaps.lcaps = ddscaps_primarysu***ce or ddscaps_flip or ddscaps_complex
'設定要建立乙個由primary su***ce和backbuffer su***ce 所構成的su***ce
set objddprimsurf = objdd.createsu***ce(ddsd1) 'primary su***ce建立完成
dim caps as ddscaps2 宣告乙個ddscaps結構
caps.lcaps = ddscaps_backbuffer 設定要建立backbuffer su***ce
set objddbacksurf = objddprimsurf.getattachedsu***ce(caps) backbuffer suface 建立完成
---------------
上一次我們一共建立了三個su***ce,分別是objddprimsurf(primary su***ce)、objddbacksurf(backbuffer su***ce)、objddoffsurf(offscreen su***ce)。
現在我打算把objddoffsurf拿來存放,再用bltfast()把給複製到objddbacksurf上,然後用objddprimsurf的flip來跟objddbacksurf作交換的動作,因為objddprimsurf代表的就是顯示記憶體,所以交換後就顯示在螢幕上啦!
現在我先介紹bltfast()的用法:
bltfast(dx as long,dy as long,dds as directdrawsu***ce7,srcrect as rect,trans as const_ddbltfastflags) as long
dx、dy
圖形複製到目標su***ce上的位置(座標)
dds**的su***ce
srcrect
複製圖形的範圍
trans
複製的方式
ddbltfast_destcolorkey '使用目標su***ce上的透明色
ddbltfast_nocolorkey '直接複製圖形
ddbltfast_srccolorkey '使用**su***ce上的透明色
ddbltfast_wait '若暫時無法執行的話就等到可以執行時
例:想把objddoffsurf上640x480的圖形複製到objddbacksurf
dim r1 as rect
r1.left=0
r1.top=0
r1.right=640
r1.bottom=480
objddbacksurf 0, 0, objddoffsurf, r1, ddbltfast_wait
這樣就把圖形給複製到了objddbacksurf上了,不過這樣也只是在objddbacksurf上而已,並不是在螢幕上,所以必須跟objddprimsurf作flip才行,怎堋作呢?只要執行下面這一行就可以了:
objddprim.flip nothing, ddflip_wait
frameset 使用心得
欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...
Access使用心得
今天臨時用access做資料庫,長期用sql server開發習慣了,總結一下現在為止用到的比較大的差異,以後有新的再補了 1 返回字串長度 len s lenb s 前者返回字元數,後者返回位元組數,並且access中text型別字元統一為2位元組,與sql2000不同。2 join的使用 acc...
vmware使用心得
成功在winxp環境中安裝了vista business版本,反之,亦然。可以建立工作組網路連線了,虛擬機器也可以訪問網際網路了。安裝說明 在安裝嚮導中,無論使用哪種網路連線形式,都不影響正確安裝。安裝後,可以編輯本地機和虛擬機器之間的網路連線形式。需要注意三個細節問題 1 網絡卡要設定為 電源啟動...