zoukankan      html  css  js  c++  java
  • 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 }
    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

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

  • 相关阅读:
    一、redis的简介与安装
    三、Mybatis全局配置文件说明
    第七章、本地方法栈
    第六章、本地方法接口
    二、MyBatis接口开发
    第五章、虚拟机栈
    一、Mybatis入门
    第八章、声明式事务管理
    第七章、JdbcTemplate
    第六章、以XML方式配置切面
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3914617.html
Copyright © 2011-2022 走看看