📄 g02.htm
字号:
w │UINT(无符号整数)和WORD(无符号字)<br> l │LONG(长整数)<br> dw │DWORD(无符号长整数)<br> fn │函数指针<br> s │串<br> sz,str│以0字节终止的字符串<br> lp │32位的长整数指针<br> h │编号(常用于表示Windows对象)<br> msg │消息<br> ──────┴─────────────────────── </p> <p><b>变量的命名</b></p> <p> 应用匈牙利符号表示法,变量可用表2.1中的前缀代码来表示。另外,当一个变量是由一个或几个子名构成时,每一个子名都要以大写字母开头。下面是几个例子:<br> char *szFileName;//a nulla terminated string<br> int *lpiDate;//a 32-bit pointer to an int<br> BOOL bSemaphore;//a boolean value<br> WORD dwMaxCount;//a 32-bit unsigned WORD<br> 尽管我了解一个函数的局部变量没有说明,但是也有个别表示全局变量:<br> int g_iXPos;//a global x-position<br> int g_iTimer;//a global y-position<br> char *g_szString;//a global NULL terminated string<br> 总的来说,变量以g_开头,或者有时就只用g。</p> <p><b>函数的命名</b></p> <p> 函数和变量命名方式相同,但是没有前缀。换句话说,子名的第一个字母要大写。下面是几个例子:<br> int PlotPixel(int ix,int iy,int ic);<br> void *MemScan(char *szString);<br> 而且,下划线是非法的,例如,下面的函数名表示是无效的匈牙利符号表示法:<br> int Get_Pixel(int ix,int iy);</p> <p><b>类型和常量的命名</b></p> <p> 所有的类型和常量都是大写字母,但名字中可以允许使用下划线。例如:<br> const LONG NUM_SECTORS = 100;//a C++ style constant<br> #define MAX_CELLS 64;//a C style constant<br> #define POWERUNIT 100;//a C style constant<br> typedef unsigned char UCHAR;//a user defined type<br> 这儿并没有什么不同的地方——非常标准的定义。尽管大多数Microsoft程序员不使用下划线,但我还是喜欢用,因为这样能使名字更具有可读性。</p> <p><font color="#FF0000"> </font><b>C++</b> 在C++中,关键字const不止一个意思。在前面的代码行中,它用来创建一个常数变量。这和#define相似,但是它增加了类型信息这个特性,const不仅仅像#define一样是一个简单的预处理文本替换,而且更像是一个变量,它允许编译器进行类型检查和替换。</p> <p><b>类的命名</b></p> <p> 类命名的约定可能要麻烦一点。但我也看到有很多人在使用这个约定,并独立地进行补充。不管怎样说,所有C++的类必须以大写C为前缀,类名字的每一个子名的第一个字母都必须大写。下面是几个例子:<br> class CVector<br> {<br> public<br> CVector();{ix=iy=yz=imagnitude = 0;}<br> CVector(int x,int y,int z){ix=x;iy=y;iz=z;}<br> .<br> .<br> private:<br> int ix,iy,iz;//the position of the vector<br> int imagnitude;//the magnitude of the vector<br> }; </p> <p><b>参数的命名</b></p> <p> 函数的参数命名和标准变量命名的约定相同,但也不总是如此。例如下面例子给出了一个函数定义:<br> UCHAR GetPixel(int x,int y);<br> 这种情况下,更准确的匈牙利函数原型是:<br> UCHAR GetPixel(int ix,int iy);<br> 但我认为这并没有什么两样。<br> 最后,你甚至可能都看不到这些变量名,而仅仅看到类型,如下所示:<br> UCHAR GetPixel(int, int);<br> 当然,这仅仅是原型使用的,真正的函数声明必须带有可赋值的变量名,这一点你已经掌握了。<br> 注意:仅仅会读匈牙利符号表示并不代表你能使用它。实际上,我进行编程工作已经有20多年了,我也不准备为谁改变我的编程风格。因此,本书中的代码使用类匈牙利符号表示法的编码风格,这是Win32 API造成的,在其他位置将使用我自己的风格,必须注意的是,我使用的变量名的第一个字母没有大写,并且我还使用下划线。</p> <p><b>世界上最简单的Windows程序</b></p> <p> 现在读者已经对Windows操作系统及其性能和基本设计问题有了一般了解,那就让我们第一个Windows程序开始真正的Windows编程吧。<br> 以每一种新语言或所学的操作系统来编写一个“世界你好”的程序是一个惯例,让我们来试试,清单2.1是标准的基于DOS的“世界你好”程序。</p> <p><b> 程序清单2.1 基于DOS的“世界你好”程序</b><br> //DEMO2_1.cpp - standard version<br> #include <stdio.h><br> //main entry point for all standard DOS/console programs<br> void main(void)<br> {<br> printf("\nTHERE CAN RE ONLY ONE!!!\n");<br> }//end main</p> <p> 现在让我们看一看用Windows如何编写它。<br> <b>技巧</b> 顺便说一句,如果读者想编译DEMO2_1.CPP的话,就应当用VC++或Borland编译器实际创建一个调用内容的控制应用程序,这是一个类DOS的应用程序,只是它是32位的,它仅以文本模式运行,但对于检验一个想法和算法是很有用的。</p> <p><b>总是从WinMain()开始</b></p> <p> 如前面所述,所有的Windows程序都以WinMain()开始,这和简单直观的DOS程序都以Main()开始一样。WinMain()中的内容取决于你。如果你愿意的话,可以创建一个窗口、开始处理事件并在屏幕上画一些东西。另一方面,你可以调用几百个(或者是几千个)Win32 API函数中的一个。这正是我们将要做的。<br> 我只想在屏幕上的一个信息框中打印一点东西。这正是一个Win32 API函数 MessageBox()的功能。清单2.2是一个完整的、可编译的Windows程序,该程序创建和显示了一个能够到处移动和关闭的信息框。</p> <p><b>程序清单2.2 第一个Windows程序</b><br> //DEMO2_2.CPP - a simple message box<br> #define WIN32_LEAN_AND_MEAN<br> #include <windows.h>//the main windows headers<br> #include <windowsx.h>//a lot of cool macros<br> //main entry point for all windows programs<br> int WINAPI WinMain(HINSTANCE hinstance,<br> HINSTANCE hprevinstance,<br> LPSTRlpcmdline,<br> int ncmdshow)<br> {<br> //call message box api with NULL for parent window handle<br> MessageBox(NULL,"THERE CAN BE ONLY ONE!!!",<br> "MY FIRST WINDOWS PROGRAM",<br> MB_OK|MB_ICONEXCLAMATION);<br> //exit program<br> return(0);<br> }//end WinMain</p> <p> 要编译该程序,按照下面步骤:<br> 1.创建新的Win32.EXE项目并包含CD-ROM上T3DCHAP02\下的DEMO02_2.CPP。<br> 2.编译和联接程序。 <br> 3.运行!<br> 你可能会以为一个基本的Windows程序有几百行代码。当你编译和运行程序时,可能会看到如图2.5所示的内容。</p> <p><b>程序剖析</b></p> <p> 现在已经有了下完整的Windows程序,让我们一行一行地分析程序的内容。首先第一行程序是<br> #define Win32_LEAN_AND_MEAN<br> 这个应稍微解释一下。创建Windows程序有两种方式——使用Microsoft基础类(Microsoft Foundation Classes,MFC),或者使用软件开发工具包(Software Development Kit,SDK)。MFC完全基于C++类,要比以前的游戏编程所需的工具复杂得多,功能和难度也要强大和复杂10倍。而SDK是一个可管理程序包,可以在一到两周内学会(至少初步学会),并且使用了简单明了的C语言。因此,我在本书所使用的工具是SDK。<br> Win32_LEAN_AND_MEAN指示编译器(实际上是逻辑头文件)不包含无关的MFC操作,现在我们又离题了,回来继续看程序。<br> 之后,下面的头文件是:<br> #include "windows.h"<br> #include "windowsx.h"<br> 第一个引用“windows.h”实际上包括所有的Windows头文件。Windows有许多这样的头文件,这就有点像包含宏,可以节省许多手工包含显式头文件的时间。<br> 第二个引用“windowsx.h”是一个含有许多重要的宏和常量的头文件,该文件可以简化Windows编程。<br> 下面就到最重要的部分——所有Windows应用程序的主要入口位置WinMain():<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -