Windows图形编程最先遇到的就是WNDCLASS(EX)结构和CreateWindow(Ex)函数,都有一堆东西要记。虽然有IDE可以自动生成一个模板,或者有智能提示,我还是喜欢自己写,我喜欢从底层把握一切细节。Windows的编程其实很简洁的,函数名称也比较直观,就是有一些大的结构或函数很难记(极少数),例如Direct3D就要用D3DPRESENT_PARAMETERS,创建字体的LOGFONT结构等。不过用多了也就熟悉了,而且这些结构一般都有些规律。
其实WNDCLASS结构还比较好记,总共有10个成员,可以简称为1,2,3,4,分别为:
1个style;
2个cb(count byte),分别是cbClsExtra和cbWndExtra;
3个lp(long pointer),lpfnWndProc,lpszClassName,lpszMenuName;
4个h(handle),分别是hbrBackground, hIcon, hCursor, hInstance;
后来的WNDCLASSEX结构比原版多了两个:cbSize(结构本身大小),hIconSm(小图标)。关于小图标,其实Petzold在其经典著作中说这个WNDCLASSEX很奇怪,因为增加的两个成员用处都不大。ico文件本来就可以存储两个图标,一大一小,Windows可以根据情况选择合适的图标;但是又添了一个hIconSm,既要额外创建文件,又要手工指定,实在是费力不讨好,所以他就建议,直接用WNDCLASS算了,不要用这个EX的东西。其实MSDN的文档也说了,如果不需要指定小图标,还是用原来的吧,没啥影响。
CreateWindow也有不少参数,我一般写成四行
1. LPCTSTR lpClassName, LPCTSTR lpWindowName, //这行是窗口类名,窗口Title:指定你想创建什么窗口和窗口的标题
2. DWORD dwStyle, //这行是窗口的Style:细节问题
3. int x, int y, int nWidth, int nHeight, //这行是窗口的Dimension,或者Geometry,即位置和大小:不用多说
4. HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam //这行是父窗口句柄,菜单句柄(或控件ID),实例句柄,额外参数:一堆句柄
CreateWindowEx只在最前面多了一个参数DWORD dwExStyle,但这个扩展的Style特别重要,因为很多种类的窗口只有通过这个才能创建,比如透明窗口、工具窗口、置顶窗口、多文档界面(MDI)窗口等,一般做游戏的都要使用扩展Style(全屏窗口)。所以创建窗口时还是推荐使用Ex版本,一般情况第一个参数传0就行了。