接着上节内容继续学习了。
这节学习使用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进行沟通的,下节学习绘图了。