Окт 13

Получение дескриптора экземпляра приложения

Для многих функций Win32 API необходимо передавать дескриптор экземпляра приложения в качестве одного из параметров. Напомним, что значение этого дескриптора hlnstance функция WinMain получает от операционной системы через свой первый параметр.
Если значение дескриптора hlnstance используется в теле функции WinMain, проблем никаких нет, если в теле другой функции — возникает вопрос, как получить значение hlnstance? Есть три способа решения проблемы.
Первый способ (наихудший, с точки зрения стиля программирования на C++) — объявить глобальную переменную
HINSTANCE hlnst; и в теле функции WinMain запомнить значение дескриптора hlnstance. Естественно, значение глобальной переменной будет доступно во всех других функциях.
Во втором и третьем способах переменная hlnst объявляется как локальная. Во втором способе ее значение определяют при помощи функции GetQassLong:
hlnst = (HINSTANCE)GetClassLong(hWnd, GCL_HMODULE);
В третьем способе для этого используется функция GetModuleHandle:
hlnst = GetModuleHandle(NULL):