directX

你如果要在3D中表现2D的话,就要用我说的那种办法  
   
  如果单纯的2D的话  
   
  可以看D7的DDraw方面的资料,在D9中也是支持的  
   
  如果非要用D3D的话  
   
  D9里有个IDirect3DSurface9,你可以查它的帮助看看用法  
   
  给个小例子,很简单的换页,跟DDraw差不多  
   
  #include   <d3d9.h>  
  #include   <d3dx9.h>  
   
  LPDIRECT3D9   pD3D=NULL;                             //D3D9对象接口    
  LPDIRECT3DDEVICE9   pD3DDevice=NULL;     //D3D9设备对象接口  
  IDirect3DSurface9*   srcSurface=NULL;   //离屏页面  
  IDirect3DSurface9*   backbuffer   =   NULL;//后台页面  
   
  /*********************************************************************  
  *   InitDirect3D  
  *********************************************************************/  
  bool   InitDirect3D(HWND   hWnd,int   w,int   h,bool   fullScreen)  
  {  
  //创建D3D对象  
  if(   NULL   ==   (   pD3D   =   Direct3DCreate9(   D3D_SDK_VERSION   )   )   )  
  {  
  return   false;  
  }  
  //填充D3DPRESENT_PARAMETERS结构  
  D3DPRESENT_PARAMETERS   d3dpp;  
  ZeroMemory(   &d3dpp,   sizeof(   d3dpp   )   );  
   
  d3dpp.Windowed   =   !fullScreen;//窗口模式  
  d3dpp.SwapEffect   =   D3DSWAPEFFECT_DISCARD;//换页方式  
  d3dpp.BackBufferCount   =   1;//后台页面数  
  d3dpp.BackBufferHeight   =   h;//后台页面高  
  d3dpp.BackBufferWidth   =   w;//后台页面宽  
  d3dpp.hDeviceWindow   =   hWnd;//窗句柄  
  if   (!fullScreen)//根据窗口模式设置后台页面格式  
  d3dpp.BackBufferFormat   =   D3DFMT_UNKNOWN;  
  else  
  d3dpp.BackBufferFormat   =   D3DFMT_X8R8G8B8;  
  //创建D3D设备对象  
  if(   FAILED(   pD3D->CreateDevice(   D3DADAPTER_DEFAULT,//县卡类型,默认为主显卡  
  D3DDEVTYPE_REF,//设备类型     HAL硬件加速   REF微软推荐   SW软加速  
  hWnd,//窗口句柄  
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,  
  &d3dpp,//D3DPRESENT_PARAMETERS结构  
  &pD3DDevice)))//设备指针  
  {  
  return   false;  
  }  
   
  //创建离屏页面  
  if   (FAILED(pD3DDevice->CreateOffscreenPlainSurface(  
  w,   //   宽  
  h,   //   高  
  d3dpp.BackBufferFormat,//D3DFMT_X8R8G8B8,   //   页面格式  
  D3DPOOL_DEFAULT,   //页面存放位置   SYSTEMMEM内存   DEFAULT显存或内存  
  &srcSurface,   //页面指针  
  NULL)))   //保留  
  {  
  return   false;  
  }  
      //载入图片到离屏页面  
      if   (   FAILED(D3DXLoadSurfaceFromFile(srcSurface,//目的页面  
      NULL,//目的页面调色板  
      NULL,//目的页面区域  
      "D:/程序/DX/D3D9/pic/zl.bmp",//源文件路径  
      NULL,//源文件区域  
      D3DX_DEFAULT,//文件过滤类型  
      0,//ColorKey  
      NULL   )))//图片信息  
      {  
      return   false;  
      }  
      return   true;  
  }  
   
  /*********************************************************************  
  *   Render  
  *********************************************************************/  
  void   RenderD3D   ()  
  {  
  if(   NULL   ==   pD3DDevice   )  
  return;  
  //清屏  
  pD3DDevice->Clear(   0,//矩形数目    
  NULL,   //矩形范围     第一个参数不为0时有效  
  D3DCLEAR_TARGET,//清除标志  
  D3DCOLOR_XRGB(   0,0,0),//颜色    
  1.0f,   //Zbuffer  
  0   );//stencil   buffer.  
          //得到后台页面  
  pD3DDevice->GetBackBuffer(   0,//换页描绘  
  0,//Buffer链索引  
  D3DBACKBUFFER_TYPE_MONO,//唯一有效的值  
  &backbuffer);//后台页面指针  
  //页面拷贝  
  pD3DDevice->StretchRect(srcSurface,//源页面  
  NULL,//源页面区域  
  backbuffer,//目的页面  
  NULL,//目的页面区域  
  D3DTEXF_NONE   );//过滤类型  
  //翻页  
  pD3DDevice->Present(   NULL,   //源区域   Null为整个后台页面  
  NULL,   //目的区域  
  NULL,    
  NULL   );//Buffer   Null为全部Buffer  
  }  
  /*********************************************************************  
  *   CleanUpD3D  
  *********************************************************************/  
  void   CleanUpD3D   ()  
  {  
  //释放对象  
  if   (srcSurface!=NULL)  
  srcSurface->Release;  
          if   (backbuffer!=NULL)  
  backbuffer->Release;  
  if(   pD3DDevice   !=   NULL   )  
  pD3DDevice->Release();  
  if(   pD3D   !=   NULL   )  
  pD3D->Release();  
  }  

你可能感兴趣的:(DI)