|
《Windows游戏编程大师技巧》(第二版)第2章(7) 程序清单2-2:第一个Windows程序 // DEMO2_2.CPP - a simple message box #define WIN32_LEAN_AND_MEAN #include <windows.h> // the main windows headers #include <windowsx.h> // a lot of cool macros // main entry point for all windows programs int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { // call message box api with NULL for parent window handle MessageBox(NULL, "THERE CAN BE ONLY ONE!!!", "MY FIRST WINDOWS PROGRAM", MB_OK MB_ICONEXCLAMATION); // exit program return(0); } // end WinMain 要编译该程序,按照下面步骤: 1. 创建新的Win32 .EXE工程并包含CD-ROM上T3DCHAP02\下的DEMO2_2.CPP。 2. 编译和连接程序。 3. 运行!(或在CD-ROM上直接运行预编译版本DEMO2_2.EXE。) 你一定一直都以为一个基本的Windows程序至少有几百行代码。当你编译并运行这个程序的时候时,会看到如图2-5所示的内容。 图2-5:Running DEMO2_2.EXE 程序剖析 现在已经有了一个完整的Windows程序,让我们一行一行地分析程序的内容。首先第一行程序是 #define WIN32_LEAN_AND_MEAN 这个应稍微解释一下。创建Windows程序有两种方式——使用Microsoft基础类库(Microsoft Foundation Classes,MFC),或者使用软件开发工具包(Software Development Kit,SDK)。MFC完全基于C++和类,要比以前的游戏编程所需的工具复杂得多,功能足够强大和复杂,足以应付游戏的需要。而SDK是一个可管理程序包,可以在一到两周内学会(至少初步学会),并且它使用正统的C语言。因此,我在本书中所使用的工具是SDK。 WIN32_LEAN_AND_MEAN指示编译器(实际上确定了头文件的包含逻辑)不要包含我们并不需要的MFC内容。现在我们又离题了,回来继续看程序。 接着,以下列出的头文件被包含了: #include <windows.h> #include <windowsx.h> 第一个包含“windows.h”实际上包括所有的Windows头文件。Windows有许多这样的头文件,这就有点像批量包含,可以节省许多手工包含成打的显式头文件的时间。 第二个包含“windowsx.h”是一个含有许多重要的宏和常量的头文件,该文件可以简化Windows编程。 下面就到了最重要的部分——所有Windows应用程序的主要入口位置WinMain(): int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow); 首先,应当注意到奇怪的WINAPI声明符。这等同于PASCAL函数声明符,它强制参数从左边向右边传递,而不是像默认的CDECL声明符那样参数从右到左转移。但是,PASCAL调用约定声明已经过时了,WINAPI代替了该函数。必须使用WinMain()的WINAPI声明符;否则,将向函数返回一个不正确的参数并终止开始程序。 检查参数 下面让我们详细看一下每个参数: • hinstance— 该参数是一个Windows为你的应用程序生成的实例句柄。实例是一个用来跟踪资源的指针或数。本例中,hinstance就像一个名字或地址一样,用来跟踪你的应用程序。
|