程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用MFC構造DIRECTX應用框架

用MFC構造DIRECTX應用框架

編輯:vc教程

  一、 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,當然也可以不寫,只要把該工程目錄下的文件拷貝到另一個工程目錄中即可。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved