DirectX学习笔记(2)

 接着上节内容继续学习了。

这节学习使用Direct Graphics取得绘图设备GDI

打开上节的工程,在其中添加新类d3dHDC

声明如下:

// d3dHdc.h: interface for the d3dHdc class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_D3DHDC_H__2B73FC05_A098_4F64_892B_B511407084DA__INCLUDED_)
#define AFX_D3DHDC_H__2B73FC05_A098_4F64_892B_B511407084DA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <d3d9.h>
class d3dHdc 
{
public:
 d3dHdc();
 virtual ~d3dHdc();
private:
 HDC m_hdc;
 LPDIRECT3DSURFACE9 m_Surface;
public:
 void Release();
 inline operator HDC(){return m_hdc;};

};

#endif // !defined(AFX_D3DHDC_H__2B73FC05_A098_4F64_892B_B511407084DA__INCLUDED_)
实现文件如下:

d3dHdc::d3dHdc()
{
     m_hdc=0;
  m_Surface=0;
  if(!d3d_Device)
    return;
  if (d3d_Device->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&m_Surface)!=D3D_OK)
  {
   return;
  }
  m_Surface->GetDC(&m_hdc);
}

d3dHdc::~d3dHdc()
{

}
void d3dHdc::Release()
{
 if(m_Surface)
 {
  if(m_hdc)
  {
   m_Surface->ReleaseDC(m_hdc);
   m_Surface->Release();
   m_hdc=NULL;
   m_Surface=NULL;
  }
 }
}

调用的代码如下:

在Render函数中添加如下代码:

   LPCTSTR str="欢迎来到Direct3d的世界!";
 d3dClear();
 d3dHdc hdc;
 SetTextColor(hdc,RGB(255,0,0));
SetBkColor(hdc,RGB(0,255,0));
SetBkMode(hdc,OPAQUE);
 TextOut(hdc,0,0,str,strlen(str));
 hdc.Release();

 d3d_Device->Present( NULL , NULL , NULL , NULL );

这样就知道了Direct GRaphics是如何与Windows进行沟通的,下节学习绘图了。

posted @ 2007-12-03 11:06  巨巨  阅读(197)  评论(0)    收藏  举报