?? directdrawobject.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>DirectDraw對象</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<b><font FACE="Arial" SIZE="5">
<p align="center"></font><a name="目錄"><font face="宋體" size="6" color="#FF8000">DirectDraw對象</font></a></b></p>
<p align="right" style="margin-top: -10; margin-bottom: -8"><a href="index.htm"
style="text-decoration: none"><font face="宋體"><span style="text-decoration: none">返回上級</span></font></a></p>
<hr style="margin-top: -8px">
<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">IDirectDraw</font><font FACE="宋體" SIZE="3">或</font><font
FACE="Arial" SIZE="3">IDirectDraw2</font><font FACE="宋體" SIZE="3">接口對該對象進行操作。探討了以下主題:</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><ol>
<li><a href="#什么是DirectDraw對象?">什么是</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
FACE="宋體" SIZE="3">對象?</a></li>
</font><font FACE="Arial" SIZE="3">
<li><a href="#IDirectDraw2接口的新特性?">IDirectDraw2</font><font FACE="宋體"
SIZE="3">接口的新特性?</a></li>
<li><a href="#單進程的多DirectDraw對象">單進程的多</font><font FACE="Arial"
SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象</a></li>
<li><a href="#使用CoCreateInstance創建DirectDraw對象">使用</font><font FACE="Arial"
SIZE="3">CoCreateInstance</font><font FACE="宋體" SIZE="3">創建</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font FACE="宋體" SIZE="3">對象</a></li>
</ol>
</font>
</blockquote>
<font FACE="宋體" SIZE="3">
<hr>
<blockquote>
<b><font FACE="黑體"><p><a name="什么是DirectDraw對象?">什么是<font
FACE="Arial">DirectDraw</font>對象?</a></p>
</font></b>
</blockquote>
</font>
<blockquote>
<font FACE="宋體" SIZE="3"><b><p align="right"></b><a href="#目錄">返回目錄</a><b></p>
</b></font>
</blockquote>
<blockquote>
<font SIZE="3"><p ALIGN="JUSTIFY"><font face="宋體">DirectDraw對象是所有DirectDraw應用程序的核心,并且與Direct3D應用程序形成一個整體。它是你要創建的第一個對象,通過它,你可以創建所有其它相關的對象。典型的,通過調用DirectDrawCreate函數可以創建一個DirectDraw對象,它代表了IDirectDraw接口。如果你想使用該接口的另一個更高級的版本(比如:IDirectDraw2接口),以獲得更加優秀的性能,你可以請求獲得該接口。應注意的是,你可以創建若干個DirectDraw對象,每一個都代表了系統已安裝的顯示設備。</font></p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>對象代表顯示設備,并且可以利用硬件的加速特性。如果<font
FACE="Arial" SIZE="3">DirectDraw</font>對象所實例化的顯示設備具有硬件加速,則該對象是硬件加速的。<font
FACE="Arial" SIZE="3">DirectDraw</font>對象可以創建三種對象:<font FACE="Arial"
SIZE="3">DirectDrawSurface</font>(頁面)、<font FACE="Arial" SIZE="3">DirectDrawPalette</font>(調色板)、和<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>(裁剪器)創建這些對象的函數分別是:<font
FACE="Arial" SIZE="3">IDirectDraw2::CreateSurface</font>、<font FACE="Arial" SIZE="3">IDirectDraw2::CreatePalette</font>和<font
FACE="Arial" SIZE="3">IDirectDraw2::CreateClipper</font>。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">每次,多于一個的<font FACE="Arial"
SIZE="3">DirectDraw</font>對象可以被實例化。最簡單的例子是在<font
FACE="Arial" SIZE="3">Windows 95</font>系統上使用兩臺顯示器。盡管<font
FACE="Arial" SIZE="3">Windows 95</font>并不支持雙顯示器,但為每一種顯示驅動程序配置一個<font
FACE="Arial" SIZE="3">DirectDraw</font>硬件抽象層(<font FACE="Arial" SIZE="3">HAL</font>)是可能的。當缺省的<font
FACE="Arial" SIZE="3">DirectDraw</font>對象被實例化時,<font FACE="Arial" SIZE="3">Windows
95</font>和<font FACE="Arial" SIZE="3">GDI</font>將使用它所認識的顯示驅動程序。<font
FACE="Arial" SIZE="3">Windows 95</font>和<font FACE="Arial" SIZE="3">GDI</font>不認識的顯示驅動程序可與另外一個設備相匹配,獨立的<font
FACE="Arial" SIZE="3">DirectDraw</font>對象必須通過第二個顯示驅動程序的全局唯一標志符(<font
FACE="Arial" SIZE="3">GUID</font>)來創建。這個<font FACE="Arial" SIZE="3">GUID</font>可由<font
FACE="Arial" SIZE="3">DirectDrawEnumerate</font>函數獲得。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>對象管理它所創建的所有對象。它控制缺省的調色板(如果主頁面是<font
FACE="Arial" SIZE="3">8</font>位色彩模式)、缺省的關鍵色,和硬件顯示模式。它跟蹤哪些資源已經被分配了,以及哪些資源正有待分配。</p>
</font><hr>
</blockquote>
<blockquote>
<b><font FACE="Arial" SIZE="3"><p><a name="IDirectDraw2接口的新特性?">IDirectDraw2</font><font
FACE="宋體" SIZE="3">接口的新特性?</font></a><font FACE="黑體" SIZE="3"></p>
</font></b><p align="right"><a href="#目錄"><font FACE="宋體" SIZE="3">返回目錄</font></a></p>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">IDirectDraw2</font>接口擴展了原先<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口的函數性:增加了一個<font
FACE="Arial" SIZE="3">IDirectDraw2::GetAvailableVidMem</font>函數。該函數可以詢問所有可用的視頻<font
FACE="Arial" SIZE="3">RAM</font>容量值,和當前可以為某種指定類型的頁面所用的空余視頻<font
FACE="Arial" SIZE="3">RAM</font>容量值。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectX</font>使用<font
FACE="Arial" SIZE="3">COM</font>模型表明,可以通過提供新的接口而給舊的接口加入新的函數特性。在<font
FACE="Arial" SIZE="3">DirectX3</font>的版本中,<font FACE="Arial" SIZE="3">IDirectDraw2</font>接口取代了原先的<font
FACE="Arial" SIZE="3">IDirectDraw</font>接口。這個新的接口可以通過調用<font
FACE="Arial" SIZE="3">IDirectDraw::QueryInterface</font>方法來獲得,如下例所示:</p>
<font FACE="Arial" SIZE="1"><p
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font></font><font
face="宋體" color="#FFFFFF">……</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">//*********************************************************************</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">//本例程片段演示如何創建一個IDirectDraw2接口.</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">//*********************************************************************</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">LPDIRECTDRAW lpDD;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">LPDIRECTDRAW2 lpDD2;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">//首先創建一個IDirectDraw接口</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">ddrval = DirectDrawCreate(NULL, &lpDD, NULL);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">if(ddrval != DD_OK)</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">return;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_NORMAL);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">if(ddrval != DD_OK)</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">return;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">//獲得新的接口</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">ddrval = lpDD->QueryInterface(IID_IDirectDraw2, (LPVOID
*)&lpDD2);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">if(ddrval != DD_OK)</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">return;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">ddscaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">ddrval = lpDD2->GetAvailableVidMem(&ddscaps,
&total, &free);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">if(ddrval != DD_OK)</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
face="宋體" color="#FFFFFF">return;</font></p>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY"><br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -