创建窗口中的hInstance

hInstance in CreateWindow

本文关键字:hInstance 窗口 创建      更新时间:2023-10-16

我使用CreateWindow创建主窗口。WNDCLASSEX中的hInstance为注册类的实例。所以我需要CreateWindow函数中的hInstance来找到它。

我使用CreateWindow创建一个按钮。现在没有用户定义的WNDCLASSEX。BUTTON的WNDCLASSEX是全局的。但我仍然需要传递一个hInstance的功能?为什么要传递正确的值?

在微软的例子中,它是(HINSTANCE)GetWindowLong(hMainWnd, GWL_HINSTANCE),但我不知道它是什么。

如果我有什么地方错了,也请告诉我。

谢谢。

我在2001年的MSDN中找到了CreateWindowCreateWindowEx

hInstance

Windows 95/98/Me: [in]要与窗口关联的模块实例的句柄。

Windows NT/2000/XP:该值被忽略。

创建窗口时,在CreateWindow的第一个参数中使用字符串(lpClassName)指定创建实例的类。

hInstance用于在多个DLL引用中包含相同名称的类的情况下进行标识。

更多信息请参见https://devblogs.microsoft.com/oldnewthing/20050418-59/?p=35873

但是我仍然需要传递一个hInstance到函数?为什么要传递正确的值?

至于为什么,这将是有点毫无意义的(至少从winapi的角度来看),使一个全新的函数,采取一切,但只是使用父的或其他东西,当所有其他参数仍然有一个用途。

我个人不确定传递的正确值是什么,但我使用GetModuleHandle(nullptr),它应该等同于传递给WinMain的实例。它也将与Microsoft示例中使用的相同(它获取用于创建父窗口的实例),如果您使用该实例创建父窗口的话。如果使用不同应用程序的窗口作为父窗口,则会出现差异。我看到使用的另一个主要选项是nullptr/NULL,每次我使用它时,它的工作方式与前面提到的选项相同。

如果今天使用NULL和应用程序的HINSTANCE之间有细微的差异,我想知道,但这两种方法都应该可以很好地在您的窗口上创建子控件。