??xml version="1.0" encoding="utf-8" standalone="yes"?>
enum Boolean {FALSE,TRUE};
struct Name
{
char first [10];
char last[10];
};
union Number
{
int i;
float j;
};
建立三种用户自定义数据类型,q三U自定义cd的标记名分别为BooleanQName和Number。可以用q些标记名声明变量?br> Ex.
2。如果C函数原型的圆括号中什么也没有Q编译器׃查参C不对参数个数和类型做M假定Q在调用该函数是Q给函数传递Q何参数编译器都不会报错?/p>
3。函数参数列表中用const限定W说明不能再函数中修改传递给函数的参数。const限定W还有一些其他用法。例如声明常量指针:
int *const iPTR=&intger;
q条语句把iPtr声明为指向一个整数的帔R指针。iPtr所指向的值可以修改,但是不能把iPtr指向其他内存单元?br> const int *iPtr=&intgerQ?br>q条语句把iPtr声明为指向整数常量的指针。iPtr所引用的g能修改,但是可以吧iPtr指向其他内存单元?/p>
4。默认参数必L函数参数列表中的最双的参数?/p>
5。单目运符Q:Q)能够使程序访问与作用域内局部变量同名的全部变量?/p>
6。C++和C对函数名的处理方式不同,所以试图把C代码和C++代码q接Ӟ在C中编译的函数不能?br>C++识别。要通知~译器一个或多个已经在C中编译,像下面写出其函数原型Q?br>extern “C” 函数原型 //单个函数
extern “C”//多个函数
{
函数原型
}
q些声明通知~译器指定的函数不在C++中编译,因此不对q接说明中列出的函数名编码。这些函数能够得到正的q接?br>
“Windows~程像去见牙科ȝQ虽然明明知道最自己是有益处的,可还是没人喜ƢL扄包R?#8221;记得很早的时候,看了一下MFCQ还Ҏ不知道窗口啊Q按钮啊Q菜单啊Q现在读q一章才看到的Windows的真面目了?/p>
1. 传说中的“匈牙利符可C法”Q早有耳闻此法Q但未曾一见啊Q最是头痛的属看帮助文的Q尤其是MSDN了,不过要想阅读Microsoft的一些代码,q真的懂此法呀?br>
* 匈牙利符可C法前缀代码
前缀 | 数据cdQ基cdQ?/font> |
c | Char字符 |
by | BYTE字节Q无W号字符Q?/td> |
n | Short短整数和整数Q表CZ个数Q?/td> |
i | int整数 |
xQy | Short短整敎ͼ通常用于x和y坐标) |
cxQcy | short短整敎ͼ通常用于x和y的长度;c表示计数Q?/td> |
b | BOOLQ整敎ͼ |
w | UINTQ无W号敎ͼ和WORDQ无W号字) |
l | LONGQ长整数Q?/td> |
dw | DWORDQ无W号长整敎ͼ |
fn | 函数指针 |
s | 字符?/td> |
szQstr | 以一个字节的0Q空|l止的字W串 |
lp | 32位指?/td> |
h | ~号Q常用于表示Windows对象Q?/td> |
msg | 消息 |
*变量的命?/strong>
变量的命名应用匈牙利W号表示法,变量可用上表中的前缀代码表示。另外,变量׃个或几个子名构成Ӟ每一个子名都要大写字母开头?br> 例如Q?nbsp; char *szFileName; // a null terminated string
int *lpiData; //a 32-bit pointer to a int
q有一点就是,全局变量以g_或g开头?/p>
*函数命名
函数命名和变量命名规则相同,但是没有前缀。也是_只需要子名的W一个字母要大写?br>而且函数名中使用下划U是非法的。例如,下面的函数名表示是无效的匈牙利符可C法Q?br> int Get_Pixel(int ix,int iy);
*cd和常量的命名
所有的cd和常量都是大写的字母Q但名字中可以允怋用下划线?/p>
*cȝ命名
所有c++的类必须使用大写的C为前~。类名字的每一个子名的W一个字母要大写?/p>
*参数的命?/strong>
函数的参数命名和标准变量命名U定相同?/p>
2.怎样创徏一个完全实用的WindowsE序Q也是那个我们l常见面的那个窗口。你只需要下面几步:
1.创徏一个WindowscR?br> 2.创徏一个事件句柄或WinProc?br> 3.用Windows注册WindowscR?br> 4.用前面创建的WindowscdZ个窗口?br> 5.创徏一个能够从事g句柄获得或向事g句柄传递Windows信息的主事g循环?/font>
2.1 Windowsc?br> “ Windows中的每一个窗口、控件、列表框、对话框和小部g{等实际上都是一个窗口。区别它们的是定义它们的类。一个Windowscd是Windows能够操作的一个窗口类型的描述?#8221;
“控制WindowscM息的数据l构有两个:WNDCLASS和WNDCLASSEX。WNDCLASS是比较古老的一个,可能不久废弃,因此我们应当使用新的扩展版WNDCLASSEX?#8221;
typedef struct _WNDCLASSEX { UNIT cbsize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSON hCoursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; }WNDCLASSEX;
创徏一个这Ll构Q然后就是填写里面所有的成员变量QWNDCLASSEX winclass;
2.2事g句柄
q里所说的句柄Qexent handlerQ就是当事g发生时Windows从主事g循环调用的回?br>函数。对于创建的M一个Windowsc,都有一个独立的事g句柄Q我们称呼它为WinProcQ当用户
和Windowsq行dӞ你的H口?或其他的应用E序H口产生事g和消息。所有的消息都进入一
个队列,而你的窗口的消息发送你的窗口专用队列中。然后主事g循环索这些消息,q且它们发
送到你的H口的WinProc中来处理?/pre>WinProc原型Q?br> LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam );2.3注册Windowsc?br> Windowscdl定义ƈ且存攑֜Windsclass中,必须新的类通知Windows。该功能通过
RegisterClassEx()函数实现Q用一个指向新cd义的指针来实现。如下:
RegisterClassEx(&winclass);2.4创徏H口
创徏H口使用CreateWindow()或CreateWindowEx()函数?/pre>2.5M件@?br>![]()
while(TRUE)
{
// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
Game_Main();
} // end while
]]>
l于{到在网上买?a >?/a>了,虽然q书时代有点老,但还是觉得还是有价|应该好好M读,仔细阅读当然是要做些W记啦?/p>
学习前的准备工作Q?br> q本书的例子用的是VC++ 6.0+DirectX 7.0Q所以先得到|上下蝲DirectX 7.0 SDKQ?.0亦可Q,解压Q把Include 和lib 下的文g全部拯到Vc ++的对应目录下Q然后,我就试着~译了第一章的一个例子游?--打砖块的游戏Q发现连接不了外部文Ӟ无奈Q百度一下,原来q得对编译器做些工作Q在Project/Settings /link Object/library d ddraw.lib dxguid.lib ?/p>
W一?学v无
讲解游戏诞生的整个过E,Windows下面的游戏运行整个过E和游戏~程中的规范?br> “
一个简化游戏的l构Q第一步,初始?br>
W二步,q入游戏循环
W三步:获得玩家的输入信?br>
W四步:执行人工和游戏逻辑
W五步:渲染下一帧图?br> W六步:同步昄
W七步:循环
W八步:关闭 ”
啊哈原来一个游戏程序简单点是q样q行的,游戏也ƈ不是那么秘额?/p>
另外的收获就是游戏编E一些规范和技巧:
1.“你不应当在对q行旉或内存要求特别严格的代码D中式用高层API。特别是与游戏内循环有关的代码大多需要手工编写,否则游戏多半会遇C重的速度和性能的问题。当Ӟqƈ不一位着׃能信任DirectX{? APIQ因为DirectX的设计目的就是兼N性能?#8220;thin”原则。但通常来讲Q应当避免频J调用高层的函数?#8221;----q点是有点不太明白,作者是对API的性能不太信QQ还是另有原因,暂且攑֜q里Q等整体看完再研I之?/p>
2.“不要x用全局变量?#8221;“׃参数要被压栈和出栈,执行q个函数体所需旉于调用函数所需的时_在这U情况下Q更好的Ҏ可以是设立一些全局变量Q然后再调用前进行赋g传递参?#8221;——时间是如此的重要!
3.“使用内联函数”--呵呵Q这个上C++课时老师讲啦。虽然ɾ~译后的E序变大了,但却有效的提高运行速度?/p>
4.“量使用32位的变量而不?位或16位变量?#8221;
“struct CPOINT
{
short x,y;
unsigned char c;
} //
end CPOINT”
“注意Q定义这个结果看上去不错Q但实际q如此!首先Q结构本w是一?字节长的l构—?2*sizeof(short)+sizeof(char))=5
字节。这太糟了额Q由于没注意字节寚wQ内存寻址的时候会出大问题?#8221;——这点确实不知道Q标C?/p>
5.“以类似RISC的方式来~程。换句话来说Q尽量简化你的代码,而不是是他更复杂?#8221;——以前一直想Q能一句完成,׃要写多几行,原来单句子,执行的更快?#8220;使用二进制移位运来q行乘数?的幂的简单整C法?#8221;
6.“不要为简单的对象定义太多复杂的数据结构。链表结构很好用Q但q不意味着当你所需要的其实是大U有256个固定数l的时候,你也该用链?#8221;
7.最后有一个小游戏Q但是我寚w面的撞法Q不太理解啊Q真是有炚w度啊?/p>