DirectX7 0使用心得

2021-08-25 03:06:16 字數 4492 閱讀 9235

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 網絡卡要設定為 電源啟動...