При программировании с использованием Windows API я всегда делал глобальную переменную HINSTANCE
from WinMain
. Если я хочу сделать кнопку ОК, я бы сделал это так (с учетом глобальной 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.