MFC和Direct3D9一起使用

 第一步:新建MFC单文档项目,向导如下: 

MFC和Direct3D9一起使用_第1张图片

MFC和Direct3D9一起使用_第2张图片

MFC和Direct3D9一起使用_第3张图片

MFC和Direct3D9一起使用_第4张图片

MFC和Direct3D9一起使用_第5张图片

MFC和Direct3D9一起使用_第6张图片

MFC和Direct3D9一起使用_第7张图片

MFC和Direct3D9一起使用_第8张图片

MFC和Direct3D9一起使用_第9张图片

第二步:添加引用,在项目属性的VC++目录中修改Include和lib文件夹。

MFC和Direct3D9一起使用_第10张图片

MFC和Direct3D9一起使用_第11张图片

第三步:在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 }
View Code

实现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 }
Render

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 }
OnDraw

 第六步:编译运行,结果如下:

MFC和Direct3D9一起使用_第12张图片

你可能感兴趣的:(mfc)