在使用 Windows API 进行编程时,我总是将 WinMain
中的 HINSTANCE
立即设为全局变量。如果我想做一个 OK 按钮,我会这样做(给定全局 HINSTANCE g_hInstance
):
return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, g_hInstance, NULL);
但最近我看到实例句柄无需作为参数传递或阻塞全局命名空间就可以通过调用 GetModuleHandle(NULL)
* 来确定。所以,上面的例子看起来像这样:
return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, GetModuleHandle(NULL), NULL);
*如果你的编译器支持,你可以写GetModuleHandle(nullptr)
,语句会得到同样的结果。
与显式指定实例句柄相比,调用 GetModuleHandle(NULL)
有什么优势(如果有)?
Fine Print:我知道这有一个答案,但在 StackOverflow 上并没有将其表述为自己的问题。
最佳答案
在 EXE 中,它没有任何区别。 WinMain()
中的 hInstance
和 GetModuleHandle(NULL)
都引用相同的 HINSTANCE
(. exe文件)。但是,如果您在 DLL 中创建窗口,它确实会有所不同,因为您必须使用 DLL 的 hInstance
但 GetModuleHandle(NULL)
仍将返回 HINSTANCE
加载 DLL 的 EXE。
关于c++ - GetModuleHandle(NULL) 与 hInstance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718027/