📄 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 + -