第一步:新建MFC单文档项目,向导如下:
第二步:添加引用,在项目属性的VC++目录中修改Include和lib文件夹。
第三步:在stdafx.h文件Include部分的最后添加如下引用。
#include "d3d9.h"
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
第四步:在视图类头文件中添加如下代码:
1 LPDIRECT3D9 g_pD3D ; //Direct3D对象
2 LPDIRECT3DDEVICE9 g_pd3dDevice; //Direct3D设备对象
3 HRESULT InitD3D( HWND hWnd );
4 VOID Render();
第五步:在实现文件中添加如下代码。
构造函数中添加:
1 g_pD3D = NULL; //Direct3D对象
2 g_pd3dDevice = NULL; //Direct3D设备对象
实现InitD3D(HWND hWnd):
1 HRESULT CDirect3DFirstView:: InitD3D( HWND hWnd )
2 {
3 //创建Direct3D对象, 该对象用来创建Direct3D设备对象
4 if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
5 return E_FAIL;
6
7 //设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
8 D3DPRESENT_PARAMETERS d3dpp;
9 ZeroMemory( &d3dpp, sizeof(d3dpp) );
10 d3dpp.Windowed = TRUE;
11 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
12 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
13
14 //创建Direct3D设备对象
15 if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
16 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
17 &d3dpp, &g_pd3dDevice ) ) )
18 {
19 return E_FAIL;
20 }
21
22 return S_OK;
23 }
实现Render():
1 VOID CDirect3DFirstView:: Render()
2 {
3 //清空后台缓冲区
4 g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
5
6 //开始在后台缓冲区绘制图形
7 if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
8 {
9 //在此在后台缓冲区绘制图形
10
11 //结束在后台缓冲区渲染图形
12 g_pd3dDevice->EndScene();
13 }
14
15 //将在后台缓冲区绘制的图形提交到前台缓冲区显示
16 g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
17 }
OnDraw中的代码:
1 void CDirect3DFirstView::OnDraw(CDC* /*pDC*/)
2 {
3 CDirect3DFirstDoc* pDoc = GetDocument();
4 ASSERT_VALID(pDoc);
5 if (!pDoc)
6 return;
7 if (g_pD3D==NULL)
8 {
9 if( SUCCEEDED( InitD3D( this->m_hWnd ) ) )
10 {
11 Render();
12 }
13 else
14 {
15 AfxMessageBox(L"error");
16 }
17 }
18 else
19 {
20 Render();
21 }
22
23 // TODO: 在此处为本机数据添加绘制代码
24 }
第六步:编译运行,结果如下: