二、Windows自己的窗口—匈牙利表示法
读者可能注意到,HELLOWIN.C中有一些变量的名字显得很古怪。如szCmdLine,它是传递给WinMain的参数。
许多Windows程序写作者使用一种叫做「匈牙利表示法」的变量命名通则。这是为了纪念传奇性的Microsoft程序写作者Charles Simonyi。非常简单,变量名以一个或者多个小写字母开始,这些字母表示变量的数据型态。例如,szCmdLine中的sz代表「以0结尾的字符串」。在hInstance和hPrevInstance中的h前缀表示「句柄」;在iCmdShow中的i前缀表示「整数」。WndProc的后两个参数也使用匈牙利表示法。正如我在前面已经解释过的,尽管wParam应该更适当地被命名为uiParam(代表「无正负号整数」),但是因为这两个参数是使用数据型态WPARAM和LPARAM定义的,因此保留它们传统的名字。
在命名结构变量时,可以用结构名(或者结构名的一种缩写)的小写作为变量名的前缀,或者用作整个变量名。例如,在HELLOWIN. C的WinMain函数中,msg变量是MSG型态的结构;wndclass是WNDCLASSEX型态的一个结构。在WndPmc函数中,ps是一个PAINTSTRUCT结构,rect是一个RECT结构。
匈牙利表示法能够帮助程序写作者及早发现并避免程序中的错误。由于变量名既描述了变量的作用,又描述了其数据型态,就比较容易避免产生数据型态不合的错误。
表3-4列出了在本书中经常用到的变量前缀。
| 
					 表3-4  | 
			
	
| 
					 前缀  | 
				
					 数据型态  | 
			
| 
					 c  | 
				
					 char或WCHAR或TCHAR  | 
			
| 
					 by  | 
				
					 BYTE (无正负号字符)  | 
			
| 
					 n  | 
				
					 short  | 
			
| 
					 i  | 
				
					 int  | 
			
| 
					 x, y  | 
				
					 int分别用作x坐标和y坐标  | 
			
| 
					 cx, cy  | 
				
					 int分别用作x长度和y长度;C代表「计数器」  | 
			
| 
					 b或f  | 
				
					 BOOL (int);f代表「旗标」  | 
			
| 
					 w  | 
				
					 WORD (无正负号短整数)  | 
			
| 
					 l  | 
				
					 LONG (长整数)  | 
			
| 
					 dw  | 
				
					 DWORD (无正负号长整数)  | 
			
| 
					 fn  | 
				
					 function(函数)  | 
			
| 
					 s  | 
				
					 string(字符串)  | 
			
| 
					 sz  | 
				
					 以字节值0结尾的字符串  | 
			
| 
					 h  | 
				
					 句柄  | 
			
| 
					 p  | 
				
					 指标  | 
			
