Pro*_*oxy 22 c++ winapi visual-c++
使用Windows API进行编程时,我总是立即HINSTANCE从WinMain全局变量创建.如果我想制作一个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);
Run Code Online (Sandbox Code Playgroud)
但最近我一直看到实例句柄确定,而不必作为参数传递或堵塞全局命名空间,使用GetModuleHandle(NULL)*调用.所以,上面的例子看起来像这样:
return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, GetModuleHandle(NULL), NULL);
Run Code Online (Sandbox Code Playgroud)
*如果您的编译器支持它,您可以编写GetModuleHandle(nullptr)并且语句将具有相同的结果.
调用GetModuleHandle(NULL)显式指定实例句柄的优点(如果有的话)是什么?
精细打印:我知道这有一个答案,但它并没有在StackOverflow上作为自己的问题.
Rem*_*eau 30
在一个EXE,它并没有什么差别,hInstance从WinMain()和GetModuleHandle(NULL)两个指向同一个HINSTANCE(该.exe文件的模块).但是如果你在DLL中创建窗口确实会有所不同,因为你必须使用DLL hInstance但GetModuleHandle(NULL)仍然会返回HINSTANCE加载DLL的EXE.