用MFC构造DIRECTX应用框架

一、MFC类库与DirectXSDK

Microsoft DirectX SDK是开发基于 Windows平台游戏的一个软件开发工具,其主要功能主要包括在五个组件中: DirectDraw、DirectSound、DirectPlay、Direct3D和DirectInput,每个组件都具不同的功能:

.DirectDraw使用直接写存技术加快游戏的动画速度;
.DirecSound控制游戏声音的合成和播放;
.DirectPlay使游戏具有网络多人游戏功能;
.Direct3D让程序员更方便地开发三维游戏:
.DirectInput使游戏支待更多的输入设备(现在只支持游戏杆、鼠标和键盘)。

可以说DirectXSDK提供了编写一个游戏所必须的功能及基层函数,所以大多Windows游戏都使用了DitrectXSDK。

MFC(Microsoft Foundation Class)类库是Microsoft Visual C++中提供的一个功能强大的Windows应用程序开发类,使用这些类我们可以避免和繁琐的Windows APl打交道,而且在VisualC++中我们还可以利用C1assWizard对MFC类进行Windows消息映射,所以如果能用MFC类库来开发DirectXSDK的应用程序,至少有以下几个好处:

1.可以用 VC++的 C1assWizard方便地对Windows消息进行映射;
2.增加了程序的可读性,并且可以用VC++的ClassView方便的管理所用的类;
3.增加程序代码的可重用性,可以在原有的基础上开发出功能更强大的应用程序更进一步,如果我们能开发出一个能生成DirectXSDK应用程序基本框架的VC++的工程向导,则为以后开发DirectX SDK应用程序提供及大的方便。下面,我们将用Visua1 C++5.0先编写一个DirectXSDK应用程序的基本框架。

二、编写DirectXSDK应用程序基本框架

我们按下列步骤建立一个勘rectXSDK程序的基本框架:

1.用 Visual C++的 MFC AppWizard(EXE)生成一个基于对话框的工程文件,取名为DirectX,在向导第二步时取消About Box的复选框,然后按Finish按钮。
2.删除在DirectX工程目录中生成的DirectXDlg.CPP和DirectXDlg.H两个文件,并在Visual C++的FileView中删除以上两个文件,按CTRL十W启动ClassWizard删除CDirectXDlg类,然后在ResourceView中删除 IDD_DIRECTX_
DIALOG。
3.建立两个文件 DirectXWnd.CPP和DirectXWnd.H(这两个文件在本文的附录中,请注意不要删除有“\\{”和“\\}”之间的内容,否则将不能使用ClassWizard对窗口消息进行映射),并把它们加入到工程中。这时工程中将增加一个基于CWnd的CDirectXWnd类,这是我们的DirrectX应用程序的基类。CDirectXWnd类创建一个窗口并生成一个与该窗口相关联的DirectDraw对象lpDD,同时还生成一个显示平面(lpFrontBuffer)和一个显示缓冲平面(lpBackBuffer),该类使用了几个虚函数,必要时其派生类可以覆盖这些函数。
4.打开DirectX.CPP,把# include“DirectXDlg.h”改为#include“DirectXWnd.H”然后把CDirectXApp::InitInstance()函数修改如下,其中黑体字为要增加的内容:

BOOL CDirectXApp::lnitlnstnnce()
{
   #ifdef _AFXDLL  Enable3dControls();//Call this when Using MFC in a shared DLL
   #else  Enable3dControlsStatic();//Call this when linking to MFC statically
   #endif

CDirectXWnd *pWnd=new CDirectXWnd();
   pWnd->Create("DirectXWnd Test");
   m_pMainWnd = pWnd;
   pWnd->UpdateWindow();
   pWnd->SetFocus();
   if(pWnd->InitializeGame(640,480,8)==FALSE)
   {
     pWnd->DestroyWindow();
     return FALSE;
   }
   MSG msg;
   while(1)
   {
     if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
     {
       if(!GetMessage(&msg,NULL,0,0))
         return msg.wParam;
       TranslateMessage(&msg);
       DispatchMessage(&msg);
     }
     else
     {
       if(pWnd->blsActive)
       {
         pWnd->UpdateFrame();
       }
     }
   }
   return FALSE;
}

编译该程序并运行,可以看到出现一个黑色的屏幕窗口,按ESC或F12则可退出程序。至此,我们的基本框架已经建立好了,虽然这个框架还比较简单,但我们可以在此基础上开发出更强大的应用框架。为了方便使用该框架,我们可以为该框架写一个Custom AppWizard,当然也可以不写,只要把该工程目录下的文件拷贝到另一个工程目录中即可。

时间: 2025-01-21 07:05:06

用MFC构造DIRECTX应用框架的相关文章

serialize函数重载-mfc文档视图框架下怎么实现对话框中数据的保存与打开

问题描述 mfc文档视图框架下怎么实现对话框中数据的保存与打开 在文档菜单栏上自己添加了一个对话框资源,并在对话框上添加了保存与打开按钮,想在对话框中重载文档serialize函数,但程序总是进不去,请问怎么实现? 解决方案 先看serialize是否有调用,然后就是对话框是否获取到数据 解决方案二: 程序进不去是什么意思.你不如重新用向导创建一次. 新建一个单文档程序,最后一步,从CFormView继承.重写OnNewDocument和OnOpenDialog

VC MFC专题

MFC程序如何实现给对话框添加背景图片 MFC游戏开发笔记十 游戏中的碰撞检测进阶:地图类型&障碍物 MFC游戏开发笔记九 游戏中的碰撞判定初步&怪物运动简单AI MFC游戏开发笔记八 游戏特效的实现(二):粒子系统 MFC游戏开发笔记七 游戏特效的实现(一):背景滚动 MFC游戏开发笔记六 图像双缓冲技术:实现一个流畅的动画 MFC游戏开发笔记五 定时器和简单动画 MFC游戏开发笔记四 键盘响应和鼠标响应:让人物动起来 MFC游戏开发笔记三 游戏贴图与透明特效的实现 MFC游戏开发笔记二

全面解析MFC应用程序框架

对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用到什么程度,毕竟现在的工具都是非常的强大,对于一般的编程任务来说还没有不能够胜任的工具,否则的话恐怕他就不可能在这个世界上存在哪怕是只有一个月的生命. 但是根据个人所好以及周围的人的影响,我们都会去使用某一种或者几种工具.比较Visual Basic .C++ Builder和Delphi等编程工具

Tangram与软件的组合构造

Tangram与软件的组合构造       Tangram是中文"七巧板"的英文对应物,大概老外们认为"七巧板"是唐朝人的睿智游戏,而海外唐朝就象征着中国."七巧板"表现出明显的朴素的构造化思想,以7个元素为基,尽情的造你能所造.最早开发Tangram的时候,这个系统取个什么名字,颇费一番脑筋,好的创意一定得有相配的名字.七巧板的想法就是给一个软件系统一个充分大的"基",在这个"基"的基础上允许你进行符合规

用C#开发程序应用框架

简介: 框架是一种定制的通用的应用程序开发基础软件,在其基础上可以开发完整的关且功能完善的软件.在最近几年里,已经成功实现了某些应用领域的开发框架,比如说用户介面开发及数据访问开发等.如果能成功的开发出一个框架,这将是一个突破,因为这意味着开发将不再从头开始实现某个功能:比如一个框架如果可以成功的生成一个用户介面,哪么它也能生成做任意的用户介面.例如,假如我们使用java Applets 和servlets,我们仅仅需要重写某些方法,就可以实现我们自己的代码.这其中java Applets和se

MFC打印预览、映射模式、坐标变换

MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档, 当指向打印机设备时就打印文档.这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了.因为打印预览是在屏幕上进行的,所以通常我们会认为这时传进来的pDC一定也是属于屏幕DC一类的.但是其实不然,这个pDC

常见MFC UI界面库

Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,其余的都是收费的. The Ultimate Toolbox   http://www.codeproject.com/KB/MFC/UltimateToolbox.aspx GuiToolkit(开源,mfc扩展框架,类似Visual Studio 2003风格)h

MFC教程(1)--MFC概述

MFC是一个编程框架 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法.因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓.Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步

MFC应用程序中指针的使用

VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作.其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决. 下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正. 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题. 下面这节内容主要是一般的框架,然后再讲多线程中的指针使用.使用到的类需要包含响应的头文件.首先一般获得本类(视,文档,