?? directdrawobject.htm
字號:
這個例子演示了用<font FACE="Arial" SIZE="3">C++</font>創建一個<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口的方法,然后再調用<font
FACE="Arial" SIZE="3">IDirectDraw::QueryInterface</font>方法來創建一個<font
FACE="Arial" SIZE="3">IDirectDraw2</font>接口。這個新接口包含了<font
FACE="Arial" SIZE="3">IDirectDraw2::GetAvailableVidMem</font>函數,而試圖從<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口調用該函數將會在編譯的時候導致一個錯誤。</p>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">IDirectDraw2::GetAvailableVidMem</font>是唯一一個被加入<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口的新方法。而且,<font FACE="Arial"
SIZE="3">IDirectDraw2::SetDisplayMode </font>和<font SIZE="3"> </font><font FACE="Arial"
SIZE="3">IDirectDraw2::EnumDisplayModes</font>,這兩個方法被修改和擴展。</p>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">IDirectDraw::SetCooperativeLevel </font>和<font
SIZE="3"> </font><font FACE="Arial" SIZE="3">IDirectDraw::SetDisplayMode</font>之間的相互關系與<font
SIZE="3"> </font><font FACE="Arial" SIZE="3">IDirectDraw2::SetCooperativeLevel </font>和<font
SIZE="3"> </font><font FACE="Arial" SIZE="3">IDirectDraw2::SetDisplayMode</font>之間的相互關系有一些改變。如果你使用舊的<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口,而且應用程序通過調用設置有<font
FACE="Arial" SIZE="3">DDSCL_EXCLUSIVE</font>標志的<font FACE="Arial" SIZE="3">IDirectDraw::SetCooperativeLevel</font>取得了獨占(全屏)顯示模式,用<font
FACE="Arial" SIZE="3">IDirectDraw::SetDisplayMode</font>來改變模式,再調用設置有<font
FACE="Arial" SIZE="3">DDSCL_NORMAL</font>標志的<font FACE="Arial" SIZE="3">IDirectDraw::SetCooperativeLevel</font>來釋放獨占模式,原始的顯示模式不會被還原。除非應用程序明確的調用<font
FACE="Arial" SIZE="3">IDirectDraw::RestoreDisplayMode</font>方法或<font FACE="Arial"
SIZE="3">DirectDraw</font>對象被銷毀時,原始的顯示模式才能恢復。然而,如果你使用新的<font
FACE="Arial" SIZE="3">IDirectDraw2</font>接口,然后按著與上面同樣的方法,當<font
FACE="Arial" SIZE="3">DirectDraw</font>對象失去獨占模式時,顯示器的原始顯示模式將會自動被恢復。</p>
<p ALIGN="JUSTIFY">因為有些接口可能會因新接口的發布而該動,混合使用一個接口和它的替代者的方法(比如<font
FACE="Arial" SIZE="3">IDirectDraw </font>與<font FACE="Arial" SIZE="3">IDirectDraw2</font>)可以導致意想不到的錯誤。你必須只使用某接口的同一個版本的函數或方法。</p>
</font><hr>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><b><font FACE="黑體"><p><a
name="單進程的多DirectDraw對象">單進程的多</font><font FACE="Arial">DirectDraw</font><font
FACE="黑體">對象</font></a></b></p>
</font><p align="right"><a href="#目錄"><font FACE="宋體" SIZE="3">返回目錄</font></a></p>
</blockquote>
<blockquote>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font><font FACE="宋體"
SIZE="3">允許一個進程在需要的時候,可以任意多次的調用</font><font
FACE="Arial" SIZE="3">DirectDrawCreate</font><font FACE="宋體" SIZE="3">函數。每次調用后,返回一個唯一的與設備無關的接口。每一個</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象可以隨心所欲的使用;在對象與對象之間沒有相互依賴的關系。每個對象的行為就象它是由一個唯一的進程創建的。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">因為</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
FACE="宋體" SIZE="3">對象之間是不相互依賴的,由一個特定的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象創建的</font><font
FACE="Arial" SIZE="3">DirectDrawSurface</font><font FACE="宋體" SIZE="3">、</font><font
FACE="Arial" SIZE="3">DirectDrawPalette</font><font FACE="宋體" SIZE="3">、和</font><font
FACE="Arial" SIZE="3">DirectDrawClipper</font><font FACE="宋體" SIZE="3">對象不應該與其它的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象一起使用,因為這些對象會在它的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象銷毀時而自動被釋放。如果它們與其它的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象一起使用,調用它們的函數將在它們被銷毀時退出。</p>
<p ALIGN="JUSTIFY">例外的是,</font><font FACE="Arial" SIZE="3">DirectDrawClipper</font><font
FACE="宋體" SIZE="3">對象是由</font><font FACE="Arial" SIZE="3">DirectDrawCreateClipper</font><font
FACE="宋體" SIZE="3">函數創建的。這些對象與任何特定的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象是沒有關系的,可以與一個或多個</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象一起使用。</p>
</font><hr>
</blockquote>
<blockquote>
<b><font FACE="黑體"><p></font><a name="使用CoCreateInstance創建DirectDraw對象"><font
face="宋體">使用CoCreateInstance創建DirectDraw對象</font></a></b></p>
<p align="right"><a href="#目錄"><font FACE="宋體" SIZE="3">返回目錄</font></a></p>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">除了用常規的</font><font
FACE="Arial" SIZE="3">DirectDrawCreate</font><font FACE="宋體" SIZE="3">方法創建一個</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象外,你還可以使用</font><font
FACE="Arial" SIZE="3">CoCreateInstance</font><font FACE="宋體" SIZE="3">函數,再調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::Initialize</font><font FACE="宋體" SIZE="3">來創建一個</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象。以下的例程片段描述了這個方法的各步驟。</font><font
SIZE="3"> </font><font FACE="Arial" SIZE="3"></p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">第一步、在程序的最開始調用</font><font
FACE="Arial" SIZE="3">CoInitialize</font><font FACE="宋體" SIZE="3">來初始化</font><font
FACE="Arial" SIZE="3">COM</font><font FACE="宋體" SIZE="3">對象,參數為</font><font
FACE="Arial" SIZE="3">NULL</font><font FACE="宋體" SIZE="3">。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="1"><p
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
face="宋體" size="3" color="#FFFFFF">if ( FAILED( CoInitialize( NULL )))</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" size="3" color="#FFFFFF">return FALSE;</font><font FACE="宋體" size="5"></p>
</font>
</blockquote>
<font FACE="宋體" size="5">
<blockquote>
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">第二步、然后,調用<font
FACE="Arial" SIZE="3">CoCreateInstance</font>和<font FACE="Arial" SIZE="3">IDirectDraw2::Initialize</font>來創建<font
FACE="Arial" SIZE="3">DirectDraw</font>對象。</p>
</blockquote>
</font>
<blockquote>
<font face="宋體" size="1"><p
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
color="#FFFFFF" face="宋體" size="3">ddrval = CoCreateInstance( &CLSID_DirectDraw,</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
color="#FFFFFF" face="宋體" size="3">NULL, CLSCTX_ALL, &IID_IDirectDraw2, &lpdd
);</font></p>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">在</font><font FACE="Arial" SIZE="3">CoCreateInstance</font><font
FACE="宋體" SIZE="3">函數中,第一個參數</font><font FACE="Arial" SIZE="3">CLSID_DirectDraw</font><font
FACE="宋體" SIZE="3">,是</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
FACE="宋體" SIZE="3">驅動對象類的類標志符;</font><font FACE="Arial" SIZE="3">IID_IDirectDraw2</font><font
FACE="宋體" SIZE="3">參數指定了要創建的特定的</font><font FACE="Arial"
SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象;最后的</font><font
FACE="Arial" SIZE="3">lpdd</font><font FACE="宋體" SIZE="3">參數接收創建的對象。如果調用成功,這個函數返回一個沒有初始化的對象。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">第三步、在你使用這個</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象之前,你必須調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::Initialize</font><font FACE="宋體" SIZE="3">。在此之后,你就可以操作和釋放該對象,就象它是用</font><font
FACE="Arial" SIZE="3">DirectDrawCreate</font><font FACE="宋體" SIZE="3">創建的一樣。如果在使用之前,你沒有調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::Initialize</font><font FACE="宋體" SIZE="3">,將返回</font><font
FACE="Arial" SIZE="3">DDERR_NOTINITIALIZED</font><font FACE="宋體" SIZE="3">的錯誤。</font><font
SIZE="3"> </font><font FACE="宋體" SIZE="3"></p>
</font>
</blockquote>
<blockquote>
<font face="宋體" size="1"><p
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
FACE="宋體" color="#FFFFFF" size="2">if( !FAILED ( ddrval ))</font><font FACE="宋體"
size="2"></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
FACE="宋體" color="#FFFFFF" size="2">ddrval = IDirectDraw2_Initialize( lpdd, NULL );</font><font
FACE="宋體" size="4"></p>
</font>
</blockquote>
<font FACE="宋體" size="4">
<blockquote>
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">第四步、在關閉應用程序之前,使用<font
FACE="Arial" SIZE="3">CoUninitialize</font>來關閉<font FACE="Arial" SIZE="3">COM</font>。<font
SIZE="3"> </font><font FACE="Arial" SIZE="3"></p>
</font>
</blockquote>
</font>
<blockquote>
<font FACE="宋體" SIZE="1"><p
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
color="#FFFFFF" FACE="宋體" size="3">CoUnitialize();</font></p>
</blockquote>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -