|
《Windows游戏编程大师技巧》(第二版)第2章(14) WNDCLASS结构中的下一个字段是lpszMenuName。它是菜单资源名称的空值终止ASCII字符串,用于加载和选用窗口。其工作原理将在第3章“高级Windows编程”中讨论。现在我们只需将值设为NULL: winclass.lpszMenuName = NULL; // the name of the menu to attach 如我刚提及的那样,每个Windows类代表你的应用程序所创建的不同窗口类型。在某种程度上,类与模板相似,Windows需要一些途径来跟踪和识别它们。因此,下一个字段lpszClassName,就用于该目的。该字段被赋以包含相关类的文本标示符的空值终止字符串。我个人喜欢用诸如“WINCLASS1”、“WINCLASS2”等标识符。你可以自己喜好而定,但应以简单明了为原则,如下所示: winclass.lpszClassName = "WINCLASS1"; // the name of the class itself 这样赋值以后,你可以使用它的名字来引用这个新的Windows类了,“WINCLASS1”——很酷,是吗? 最后就是小应用程序图标。这是Windows类WNDCLASSEX中新增加的功能,在老版本WNDCLASS中没有。首先,它是指向你的窗口标题栏和Windows桌面任务栏的句柄。你经常会需要装载一个自定义资源,但是现在只要通过LoadIcon()使用一个标准的Windows图标即可实现: winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // the handle of the small icon 下面让我们整体回顾一下整个类的定义: WNDCLASSEX winclass; // this will hold the class we create // first fill in the window class structure winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_DBLCLKS CS_OWNDC CS_HREDRAW CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = "WINCLASS1"; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 当然,如果想节省一些打字时间的话,可以像下面这样简单地初始化该结构: WNDCLASSEX winclass = { winclass.cbSize = sizeof(WNDCLASSEX), CS_DBLCLKS CS_OWNDC CS_HREDRAW CS_VREDRAW, WindowProc, 0, 0, hinstance, LoadIcon(NULL, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW), GetStockObject(BLACK_BRUSH), NULL, "WINCLASS1", LoadIcon(NULL, IDI_APPLICATION)} ; 这样真的省去了许多输入! 注册Windows类 现在Windows类已经定义并且存放在winclass中,必须将新的类通知Windows。该功能通过RegisterClassEx()函数,使用一个指向新类定义的指针来完成,如下所示:
|