首次接觸DirectDraw

2021-04-13 01:28:47 字數 2086 閱讀 3354

directdraw

1.directdraw可能是directx中最重要的技術,因為它溝通了2d圖形的顯示和direct3d所依賴的真緩衝層。只要掌握了directdraw,就能夠編寫各種在dos16/32下編寫的圖形應用程式。directdraw是理解directx中許多概念的關鍵,所以要特別注意。

2.directdraw的介面

directdraw由5個介面組成:

(1)iunknown--所有的com物件必須從這個基本介面中獲得,directdraw也不例外。iunknown只包含了被其他介面覆蓋的addref(),release(),和queryinte***ce()函式

(2)idirectdraw--這是乙個必須建立出同directdraw一起開始工作的主要介面物件。

(3)idirectdrawsu***ce--這代表你將建立的實際顯示畫面,顯示時需要利用directdraw.

(4)idirectdrawpalette--directdraw可以處理任何色空間,從1位單色到32位真彩色。它用來建立、載入、操作調色盤以及呼叫調色盤來畫圖,如主畫面及輔助畫面。

(5)idirectdrawclipper--用於一些可視顯示面的子集剪下directdraw光柵和點陣圖操作。大多數情況下,只在視窗directx應用程式軟體中使用directdraw剪下器,和用directdraw剪下器在顯示畫面的區域裡對位圖進行剪下。

4建立directdraw物件

首先需要呼叫directdrawcreate()函式,如下:

hresult winapi directdrawcreate(guid far *lpguid,

lpdirectdraw far * lplpdd

iunknown far *punkquter);

引數:lpguid--這是你所需要的顯示驅動的guid(全域性統一識別符號)。大多數情況下,你只須用null代替預設硬體。

lplpdd--這是乙個指向獲得idirectdraw指標的指標,注意:lplpdd返回乙個idrectdraw介面,而不是idrectdraw4介面

punkouter--高階特徵,通常設定為null.

例子:lpdirectdraw lpdd = null;//storage for idirectdraw

//create the directdraw object

directdrawcreate(null,&lpdd,null);

5.directdraw的錯誤處理

failed()--對錯誤進行測試。

succeeded--對成功進行測試

例子1:

if(failed(directdrawcreate(null,&lpdd,null)))

例子2:

if(succeeded(directdrawcreate(null,&lpdd,null)))

else

你要檢查錯誤,還可以看directdrawcreate()函式的返回**,具體查閱幫助

6.改進介面

lpdirectdraw lpdd = null;

lpdirectdraw lpdd4 = null;

//first create base idirectdraw inte***ce

if(failed(directdrawcreate(null,&lpdd,null)))

if(failed(lpdd->queryinte***ce(iid_idirectdraw4,(lpvoid*)&lpdd4)))

lpdd->release();

lpdd->null;

6.和windows協同工作

設定directdraw的協作等級,需要用到idirectdraw4::setcooperativelevel()函式

編寫全屏程式如下:

lpdd4->setcooperativelevel(hwnd,

ddscl_fullscreen|

ddscl_allowmodex|

ddscl_exclusive|

ddscl_allowreboot)

普通窗體程式如下:

lpdd4->setcooperativelevel(hwnd,ddscl_normal);

首次接觸GIT

git詳細參考教程 git init 初始化乙個倉庫 git add 向暫存區新增內容 git commit m message for desc 向倉庫提交內容,附帶注釋文字 git status 顯示git當前狀態 git rm 後 git commit 刪除某個檔案 git log 獲取更改日...

首次接觸SQL巢狀語句

終於要用到sql巢狀語句了,雖然不用巢狀語句也可以有其他解決方案,但既然碰到了就研究一下。遇到的問題是這樣,有兩個表 要求把 和 裡面的每一條記錄都讀出來,而 表的每條記錄都通過外來鍵aid與 表裡的記錄建立唯一對應關係,但是 表裡面的資料只是乙個附加資訊,所以 表的記錄要比 表少的多 我只要在 表...

首次接觸C語言 筆記二

函式指標 include include 函式 int add int x,int y main 效果如下 result 54 請按任意鍵繼續.結構體 include include 定義乙個名字叫 student的結構 struct student struct student1 main 取值運...