在MFC中使用DXUT(Direct3D)框架

在MFC中使用DXUT(Direct3D)框架

 

源代码 (注:testMFCDXUT例子可能能在VS2008上编译通过,但testSDIDXUT_VS2008SP1是在VS2008SP1新建的工程)

本文使用的是Microsoft DirectX SDK (August 2009) ,VS2008SP1和XPSP3环境.

配置Microsoft DirectX SDK (August 2009)环境

 

安装完成后需要设置头文件路径和库文件路径.

工具-->选项-->项目和解决方案-->VC++目录

包含文件:

1.C:/Program Files/Microsoft DirectX SDK (August 2009)/Include

2.$(ProjectDir)DXUT/Core

3.$(ProjectDir)DXUT/Optional

库文件:

1.C:/Program Files/Microsoft DirectX SDK (August 2009)/Lib/x86

包含文件的2和3是项目目录下的DXUT源代码目录,这样包含头文件的时候不需要指定路径.

注:要是不怕麻烦的话可以不用设置2和3项包含文件,在附加包含目录中设置

项目-->属性-->配置属性-->C/C++-->常规-->附加包含目录

./DXUT/Core;./DXUT/Optional

 

为了在MFC中使用DXUT,创建了两个类CDXUTWindow和CDXUTD3D9Device

CDXUTWindow类是MFC的窗口派生类,下面是一些函数和参数的作用

 

CDXUTD3D9Device是DXUT框架的中需要用户实现的D3D9接口类,CDXUTD3D9Device只用有个对外给CDXUTWindow::DXUTWindowInit()调用的CDXUTD3D9Device::DXUTWindowInit接口.其他都是DXUT框架的接口.

使用步骤:

1.新建MFC工程,这里选择对话框程序

2.从C:/Program Files/Microsoft DirectX SDK (August 2009)/Samples/C++拷贝DXUT文件夹到刚新建的项目目录.

3.拷贝本文中的CDXUTWindow,CDXUTD3D9Device的支持文件和修改的部分DXUT框架文件(DXUT.cpp和DXUT.h)

4.添加CDXUTWindow,CDXUTD3D9Device和DXUT框架的核心文件(刚才拷贝的项目目录下DXUT/Core下的所有*.cpp和*.h)到项目中.

5.取消预编译头文件:项目-->属性-->配置属性-->C/C++-->预编译头文件-->创建/使用编译头文件-->不使用预编译头

6.子类化 CDXUTWindow:拖一个CStatic控件,该控件ID,绑定到CDXUTWindow类上.(也可以用CWnd::Create创建)

到此,程序已经能编译运行了,运行你就能看到DXUT那个熟悉的蓝色背景画面了.

下图是在单文档视图类程序中移植的DXUT框架的CustomUI示例.

 

 

 

如果不喜欢用定时器来调用DXUT渲染函数这种方式,仍然可以在MFC中仿DXUT的渲染消息泵,方法如下

1.1在文档视图类程序的CWinApp::OnIdle直接调用CDXUTWindow::OnKickIdle();

1.2 对话框程序中WM_KICKIDLE消息处理函数中return CDXUTWindow::OnKickIdle();

(注:这里的WM_KICKIDLE消息过程和响应自定义消息一样,就是消息不同而已)

 

关于WM_CHAR消息和WM_LBUTTONDOWN为什么不响应,可以设置CDXUTWindow::m_bNoWmKeyDown来决定是否传递,但是会有"当当当"的按键声.

有些消息需要从父窗口转发给DXUT控件类的话只能用PostMessage,不能用SendMessage.

 

CDXUTWindow源代码

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值