📄 clipper.htm
字号:
FACE="Arial" SIZE="3">DirectDraw</font>对象的<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象。这些<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象可以被多个<font FACE="Arial"
SIZE="3">DirectDraw</font>对象所共享。驱动无关(<font FACE="Arial" SIZE="3">Driver-independent</font>)的<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象是用<font FACE="Arial" SIZE="3">DirectDraw</font>的新函数<font
FACE="Arial" SIZE="3">DirectDrawCreateClipper</font>创建的。应用程序可以在任何<font
FACE="Arial" SIZE="3">DirectDraw</font>对象创建之前调用此函数。</p>
<p ALIGN="JUSTIFY">因为<font FACE="Arial" SIZE="3">DirectDraw</font>对象不拥有这些<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象,所以它们不会在应用程序的<font
FACE="Arial" SIZE="3">DirectDraw</font>对象被释放时自动被释放。如果应用程序没有明确的释放这些<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象,<font FACE="Arial" SIZE="3">DirectDraw</font>引擎将在应用程序结束时释放它们。</p>
<p ALIGN="JUSTIFY">你仍然可以使用<font FACE="Arial" SIZE="3">IDirectDraw2::CreateClipper</font>函数创建<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象。这些<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象会在创建它们的<font
FACE="Arial" SIZE="3">DirectDraw</font>对象被释放时,被自动释放。</p>
</font><hr>
</blockquote>
<blockquote>
<font face="宋体" size="3"><b><font FACE="黑体"><p><a
name="用CoCreateInstance创建DirectDrawClipper对象">用</font><font FACE="Arial">CoCreateInstance</font><font
FACE="黑体">创建</font><font FACE="Arial">DirectDrawClipper</font><font FACE="黑体">对象</a></p>
</font></b></font><font size="4"><p align="right"></font><font face="宋体" size="3"><a
href="#目录">返回目录</a></font></p>
</blockquote>
<blockquote>
<font face="宋体" size="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDrawClipper</font>对象拥有<font
FACE="Arial" SIZE="3">COM</font>所支持的全部类功能。除了使用标准的<font
FACE="Arial" SIZE="3">DirectDrawCreateClipper </font>和<font SIZE="3"> </font><font
FACE="Arial" SIZE="3">IDirectDraw2::CreateClipper</font>创建一个<font FACE="Arial"
SIZE="3">DirectDrawClipper</font>对象外,你同样可以使用<font FACE="Arial"
SIZE="3">CoGetClassObject</font>来获得一个类对象,然后再调用<font
FACE="Arial" SIZE="3">CoCreateInstance</font>,或者直接调用<font FACE="Arial"
SIZE="3">CoCreateInstance</font>来创建它。下面的例子展示了如何使用<font
FACE="Arial" SIZE="3">CoCreateInstance </font>和<font SIZE="3"> </font><font FACE="Arial"
SIZE="3">IDirectDrawClipper::Initialize</font>来创建一个<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象。</p>
<font FACE="宋体" SIZE="1"><p
style="background-color: rgb(0,0,128); margin-top: 00; margin-bottom: 0; padding-top: 2"></font><font
color="#FFFFFF">ddrval = CoCreateInstance(&CLSID_DirectDrawClipper,</font></p>
<p
style="background-color: rgb(0,0,128); margin-top: 00; margin-bottom: 0; padding-top: 2"><font
color="#FFFFFF">NULL, CLSCTX_ALL, &IID_IDirectDrawClipper, &lpClipper);</font></p>
<p
style="background-color: rgb(0,0,128); margin-top: 00; margin-bottom: 0; padding-top: 2"><font
color="#FFFFFF">if (!FAILED(ddrval))</font></p>
<p
style="background-color: rgb(0,0,128); margin-top: 00; margin-bottom: 0; padding-top: 2"><font
color="#FFFFFF">ddrval = IDirectDrawClipper_Initialize(lpClipper,</font></p>
<p
style="background-color: rgb(0,0,128); margin-top: 00; margin-bottom: 0; padding-top: 2"><font
color="#FFFFFF">lpDD, 0UL);</font></p>
</font><font FACE="宋体" size="4"><p ALIGN="JUSTIFY"></font><font FACE="宋体" size="3"><br>
在<font FACE="Arial" SIZE="3">CoCreateInstance</font>调用中,第一个参数,<font
FACE="Arial" SIZE="3">CLSID_DirectDrawClipper</font>,是<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象类的类标志符,<font
FACE="Arial" SIZE="3">IID_IDirectDrawClipper </font>参数指名了当前所支持的接口,<font
FACE="Arial" SIZE="3">lpClipper </font>参数指向返回的<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象。</p>
<p ALIGN="JUSTIFY">在使用这种类机制创建<font FACE="Arial" SIZE="3">DirectDrawClipper</font>后,应用程序必须调用<font
FACE="Arial" SIZE="3">IDirectDrawClipper::Initialize</font>来初始化该对象,否则该对象无法使用。<font
FACE="Arial" SIZE="3">dwFlags</font>参数的值是<font FACE="Arial" SIZE="3">0UL</font>,在这种情况下,该值为<font
FACE="Arial" SIZE="3">0</font>,因为现在还没有可以支持的标志符。在这个例子种,<font
FACE="Arial" SIZE="3">lpDD</font>是拥有该<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象的<font
FACE="Arial" SIZE="3">DirectDraw</font>对象。然而,你也可以提供<font
FACE="Arial" SIZE="3">NULL</font>值,这将创建一个独立的<font FACE="Arial"
SIZE="3">DirectDrawClipper</font>对象。(这相当于使用<font FACE="Arial" SIZE="3">DirectDrawCreateClipper</font>函数来创建一个<font
FACE="Arial" SIZE="3">DirectDrawClipper</font>对象)</p>
<p ALIGN="JUSTIFY">在关闭应用程序之前,用<font FACE="Arial" SIZE="3">CoUninitialize</font>函数来关闭<font
FACE="Arial" SIZE="3">COM</font>。</p>
<font FACE="宋体" SIZE="1"><p style="background-color: rgb(0,0,128)"></font><font
color="#FFFFFF">CoUnitialize();</font></p>
</font><hr>
</blockquote>
<blockquote>
<font FACE="宋体" size="3"><b><p><a name="对系统鼠标使用裁减器">对系统鼠标使用裁减器</a></p>
</b></font><font size="4"><p align="right"></font><font face="宋体" size="3"><a
href="#目录">返回目录</a></font></p>
</blockquote>
<blockquote>
<font face="宋体" size="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>应用程序通常需要为用户提供一个鼠标指针。对于全屏独占模式的应用程序来说,如果使用了换页操作,那么要实现鼠标指针的唯一选择是使用子图,通过接受由<font
FACE="Arial" SIZE="3">DirectInput</font>设备或由<font FACE="Arial" SIZE="3">Windows</font>鼠标消息传来的数据控制子图的移动。然而,任何应用程序,只要没有使用换页操作,仍然是可以使用<font
FACE="Arial" SIZE="3">Windows</font>系统的缺省鼠标指针的。</p>
<p ALIGN="JUSTIFY">当你使用系统的鼠标指针时,在某些情况下,当你在<font
FACE="Arial" SIZE="3">Blit</font>到主页面的某些区域时,你将沦为图形杂点的牺牲品。这些图形杂点象鼠标指针那样出现在屏幕上,就好象是系统留下的。</p>
<p ALIGN="JUSTIFY">通过阻止鼠标指针图象在<font FACE="Arial" SIZE="3">Blit</font>操作过程中“挡道”,<font
SIZE="3"> </font>一个<font FACE="Arial" SIZE="3">DirectDrawClipper</font>对象可以防止这样的杂点出现。这也是一个相对而言较简单的解决办法。步骤是这样的:首先,调用<font
FACE="Arial" SIZE="3">IDirectDraw2::CreateClipper</font>创建一个<font FACE="Arial"
SIZE="3">DirectDrawClipper</font>对象;然后,通过调用<font FACE="Arial" SIZE="3">IDirectDrawClipper::SetHWnd</font>函数将你的应用程序的窗口句柄连接到该裁减器对象上。一旦一个裁减器对象被连接到一个窗口后,任何后续的对主页面进行的<font
FACE="Arial" SIZE="3">Blit</font>操作(通过调用<font FACE="Arial" SIZE="3">IDirectDrawSurface3::Blt</font>函数)将不会出现任何鼠标杂点。</p>
<p ALIGN="JUSTIFY">注意:<font FACE="Arial" SIZE="3">IDirectDrawSurface3::BltFast</font>函数,以及它的<font
FACE="Arial" SIZE="3">IDirectDrawSurface</font>和<font FACE="Arial" SIZE="3">IdirectDrawSurface2</font>接口的版本,将不能对隶属于页面的裁减器进行操作。</p>
</font><hr>
</blockquote>
<blockquote>
<font face="宋体" size="3"><b><font FACE="黑体"><p><a name="对多窗口使用Clipper">对多窗口使用</font><font
FACE="Arial">Clipper</font></a></b></p>
</font><font size="4"><p align="right"></font><font face="宋体" size="3"><a
href="#目录">返回目录</a></font></p>
</blockquote>
<blockquote>
<font face="宋体" size="3"><p ALIGN="JUSTIFY">你可以使用一个单独的</font><font
FACE="Arial" SIZE="3">DirectDrawClipper</font><font face="宋体" size="3">对象,对由单独的应用程序创建的多个窗口进行</font><font
FACE="Arial" SIZE="3">Blit</font><font face="宋体" size="3">操作。</p>
<p ALIGN="JUSTIFY">这个方法是这样的。首先,创建一个单独的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font face="宋体" size="3">对象以及一个主页面。然后,创建一个</font><font
FACE="Arial" SIZE="3">DirectDrawClipper</font><font face="宋体" size="3">对象,并且将它连接到你的主页面上(通过调用</font><font
FACE="Arial" SIZE="3">IDirectDrawSurface3::SetClipper</font><font face="宋体" size="3">函数)。要使</font><font
FACE="Arial" SIZE="3">Blit</font><font face="宋体" size="3">操作仅限于窗口的客户区,在</font><font
FACE="Arial" SIZE="3">Blit</font><font face="宋体" size="3">到主页面之前,将该窗口的句柄设置给该裁减器(通过调用</font><font
FACE="Arial" SIZE="3">IDirectDrawClipper::SetHWnd</font><font face="宋体" size="3">函数)。只要你需要</font><font
FACE="Arial" SIZE="3">Blit</font><font face="宋体" size="3">到另一个窗口的客户区,再次调用</font><font
FACE="Arial" SIZE="3">IDirectDrawClipper::SetHWnd</font><font face="宋体" size="3">函数,将另一个窗口的句柄设置给裁减器。</p>
<p>创建多个</font><font FACE="Arial" SIZE="3">DirectDraw</font><font face="宋体"
size="3">对象,并且让它们</font><font FACE="Arial" SIZE="3">Blit</font><font
face="宋体" size="3">到相互的主页面是不推荐的做法。上面所介绍的技术提供了一个有效和可靠的</font><font
FACE="Arial" SIZE="3">Blit</font><font face="宋体" size="3">到多客户区的方法,针对的是单独的</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font face="宋体" size="3">对象。</font></p>
</blockquote>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -