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