二、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 |
指标 |