相关疑难解决方法(0)

GetModuleHandle(NULL)vs hInstance

使用Windows API进行编程时,我总是立即HINSTANCEWinMain全局变量创建.如果我想制作一个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上作为自己的问题.

c++ winapi visual-c++

22
推荐指数
1
解决办法
2万
查看次数

为什么在WinMain和wWinMain中存在prevInstance,如果它始终为NULL

由于我是初学者,这可能是一个非常基本的问题.我正在启动DirectX 11,在创建我的第一个应用程序时,使用了wWinMain,在搜索WinMain和wWinMain之间的区别时,我遇到了这个参数prevInstance.

根据MSDN,prevInstance始终为null,并且因为它始终为null,为什么它存在(因为认为创建者不会给出无用的参数是合乎逻辑的).(引自书中),

如果您需要一种方法来确定应用程序的先前实例是否已在运行,则文档建议使用CreateMutex创建唯一命名的互斥锁.虽然将创建互斥锁,但CreateMutex函数将返回ERROR_ALREADY_EXISTS.

什么是互斥量,以及如何使用它(一个好的链接就足够了).并且看起来需要一个方法来查找是否存在应用程序的另一个实例,prevInstance应该有一个指针或对它的引用,显然不是这种情况,因为它是null.为什么会这样,prevInstance的作用是什么?

c++ parameters winapi winmain

7
推荐指数
1
解决办法
1641
查看次数

标签 统计

c++ ×2

winapi ×2

parameters ×1

visual-c++ ×1

winmain ×1