在CreateWindow中的hInstance

时间:2013-03-17 14:47:47

标签: c++ winapi

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

我使用CreateWindow创建一个按钮。现在没有用户定义的WNDCLASSEX。 BUTTON的WNDCLASSEX是全球性的。但是我还需要将hInstance传递给函数吗?为什么以及什么是正确的价值?

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

请告诉我是否有任何错误。

感谢。

3 个答案:

答案 0 :(得分:1)

  

但是我还需要将hInstance传递给函数吗?为什么以及什么是正确的价值?

至于为什么,创建一个除了那个之外的所有东西并且只是在所有其他参数仍然有用时使用父类或其他内容的全新函数是有点无意义的(至少从winapi的角度来看)。

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

如果今天使用NULL和应用程序的HINSTANCE之间存在细微差别,我想知道,但其中任何一个都可以在Windows上创建子控件时正常工作。

答案 1 :(得分:1)

我在2001年的MSDN中发现了CreateWindowCreateWindowEx

hInstance

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

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

答案 2 :(得分:0)

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

hInstance用于标识,以防多个DLL包含一个具有相同名称的类。

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