⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directdrawobject.htm

📁 DirectX 编程初级教程中文版。只要有C++基础和一点三维知识即可。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<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, &amp;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-&gt;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-&gt;QueryInterface(IID_IDirectDraw2, (LPVOID 
  *)&amp;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-&gt;GetAvailableVidMem(&amp;ddscaps, 
  &amp;total, &amp;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 + -