我正在阅读Luna使用DirectX 11进行3D游戏编程的简介。一直为Linux命令行编程,所以我决定从阅读附录A(一个win32编程入门)开始,但我不了解CreateWindow()的某些行为。 )功能。它的第一个参数是要创建的窗口类的名称-因此,您首先必须声明一个窗口类,然后“注册”它(我认为这意味着将该类添加到神秘的win32 API中某个类堆栈中),然后将窗口类的lpszClassName成员传递给该函数,如下所示:
WNDCLASS wc;
//set all the various members of wc
wc.lpszClassName = L"BasicWndClass";
RegisterClass(&wc);
ghMainWindow = CreateWindow(L"BasicWndClass", L"LOL", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, instanceHandle, 0);
我不明白为什么最后一行与
ghMainWindow = CreateWindow(&wc, L"LOL", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, instanceHandle, 0);
我不知道某些历史或实际原因吗?
编辑:而且,这样做是不好的做法吗?
ghMainWindow = CreateWindow(wc.lpszClassName, L"LOL", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, instanceHandle, 0);
因为CreateWindow和RegisterClass调用通常不在同一模块中。CreateWindow是应用程序级别的调用,RegisterClass是库级别的调用。规范示例是埋在操作系统内部的“编辑”和“列表框”类。使用字符串或原子是避免必须依赖于实现依赖结构的非常简单的方法。
比较WNDCLASS与WNDCLASSEX,以了解为什么这是一个好主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句