为什么CreateWindow()函数需要WindowClass的名称成员而不是指向类本身的指针?

水蒸气

我正在阅读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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

指向实例成员函数而不是类的指针

为什么带有指针参数的成员函数需要指向指针的指针?

为什么允许结构本身具有“指向其自身类型的指针”而不是成员“结构类型(的数组)”本身?

为什么派生类指针指向基类可以调用派生类成员函数?

指向超类对象的指针可以用作指向子类对象的指针。但是不能调用子类的成员函数。为什么?

指向类成员函数的指针

指向类的成员函数的指针

为什么即使从类内部获取成员函数指针值也需要类名限定?

为什么指向非const成员函数的指针不能指向const成员函数而相反呢?

指向名称空间内成员函数的指针

指向成员函数的C ++指针出错:不是函数或函数指针

指向类模板成员的函数指针

指向类成员的 C++ 函数指针

指向成员函数类类型的指针

提供一个指向目标类要调用的成员函数的指针,而不是函数

指向成员函数的C ++指针而不是函数指针

如何通过本身是类成员的指针调用成员函数

指向成员函数的指针

指向成员函数的指针

内核函数在给定指向本身是指针类型的成员的指针时获取容器指针?

为什么会出现“非标准语法;使用'&'创建指向成员的指针”和“没有重载函数需要2个参数”的错误?

为什么“ this”指向类而不是类对象?

如何获得指向类的复制构造函数的成员函数指针?

类复制构造函数和指向成员的指针函数

为什么必须使用地址运算符获取指向成员函数的指针?

为什么我不能访问数组中指向我的成员函数的指针?

为什么指向函数的指针等于1?

指向成员函数的指针不是可调用对象吗

指向成员函数的函数指针