我想我的问题对于那些花时间处理 Win32 API 的人来说相对容易。
所以我的问题是:
初始化 WNDCLASSEX 实例后,我们需要使用“RegisterClassEx”函数“注册”它,为什么?我们为什么要这样做?这个注册是什么意思,在什么情况下我需要注册东西?
我想我的问题对于那些花时间处理 Win32 API 的人来说相对容易。
所以我的问题是:
初始化 WNDCLASSEX 实例后,我们需要使用“RegisterClassEx”函数“注册”它,为什么?我们为什么要这样做?这个注册是什么意思,在什么情况下我需要注册东西?
The ATOM
returned by RegisterClassEx
uniquely identifies your "window class" which can then be referred to in other windows APIs. [MSDN]
Effectively it is a hash so as to reduce the amount of data processed each time a window is created or looked for. It does also mean that multiple windows with same features can be easily created and identified.
I was addressing the practical reasons above. Hans Passant's answer correctly explains this is the OO class concept provided for C. Further MSDN example.
函数名称中的Class一词很重要。当您使用面向对象的语言(如 C++、Delphi、Java 或 C# 等)编写代码时,您可以使用class关键字来创建具有行为的对象。但是 winapi 被设计为在 C 语言中使用,C 语言没有这样的功能。RegisterClassEx() 函数是对它的模拟,它允许您创建一个窗口,该窗口从命名类“派生”其行为,您可以覆盖该行为。您使用该类名创建的每个窗口都具有相同的行为。
您传递的 WNDCLASSEX 结构为窗口提供了默认行为。该结构中最重要的成员是:
即使您不打算重新使用窗口,Windows 也会要求您调用 RegisterClassEx()。这是迄今为止在您自己的代码中最常见的函数用法。在您编写一个实现控件的库之前,您不会开始真正利用它,其他代码可以使用的窗口。像“编辑”。