值得说明的是,win32开发是C语言编程,因此,搞明白数据类型还是非常重要的。Windows API因为历史原因或者为了方便在WinUser.h中将一些数据类型用typedef或者define宏重新进行定义。
- UINT表示C语言中的无符号整型unsigned int
- PSTR表示字符串指针char *
- WPARAM在16位时期的Windows中表示unsigned short int,而现在都是UINT
- LPARAM表示long
- WndProc函数的返回类型LRESULT实际上就是long
- 入口函数WinMain被指定的WINAPI和WndProc被指定的CALLBACK都表示的是_stdcall,表示Windows和用户应用程序之间发生函数呼叫的参数传递方式。
另外,句柄是Windows API中大量使用的一种类型,比如HINSTANCE, HWND, HDC, HICON, HCUROR, HBRUSH。它们其实是一个32位的整数,代表某种特定的对象。据我所知这东西似乎也是单任务时期Windows的遗留产物,把同一个程序的不同实例进行标记,从而可以在它们之前进行内存上的继承。
Windows的变量遵从匈牙利表示法,用开头的小写字母表示变量的类型属性,比如:
- szCmdLine中的sz表示结尾为”\0”的字符串
- hInstance和hPrevInstance开头的字母h表示句柄handle
- iCmdShow的起始字母i表示整型
而对于结构变量,比如MSG结构,就直接用msg表示;WNDCLASS结构wndclass; PaintStructure结构ps,等等。
现在看看,Windows的确有值得学习的地方,能够用C语言建起一个系统内核和应用层,再通过其他的语言对Windows APIs进行封装,构建COM, ATL, MFC, .NET等等更高的不同层次的开发层。现在在Visual Studio2015居然还嵌入了Java SE development,一个平台就可以编写Desktop, Mobile Phone, Android, iOS程序。以前就听闻Windows是最疼惜程序员的平台,就是太贵,不过现在Visual Studio 2015有免费授权的社区版Lisence可以用。