首页 > 代码库 > MFC和Direct3D9一起使用
MFC和Direct3D9一起使用
第一步:新建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 else14 {15 AfxMessageBox(L"error");16 }17 }18 else19 {20 Render();21 }22 23 // TODO: 在此处为本机数据添加绘制代码24 }
第六步:编译运行,结果如下:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。