Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 18:07   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Объявление hInstance ?

Внутри WndProc, создаю WM_CREATE, далее CreateWindow. Так вот при описании функции CreateWindow компилятор не находит объявление hInstance. В борьбе с этим я решил объявить hInstance внутри WndProc - но это не помогает.

Код:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, 
	WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT paintStruct;
	HDC hDC;
	HINSTANCE hInstance;

	switch (message)
	{
	case WM_CREATE:
		CreateWindow (TEXT("button"), TEXT("Text"), 
                WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
                10, 10, 120, 110, hwnd, (HMENU) 0, hInstance, NULL);
Выдает ошибку.

Поэтому решил модифицировать код
Код:
case WM_CREATE:
	        hInstance = GetModuleHandle(NULL);
		CreateWindow (TEXT("button"), TEXT("Text"), 
                WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
                10, 10, 120, 110, hwnd, (HMENU) 0, hInstance, NULL);
После этого код заработал, ошибку не выдает.

Но если объявить hInstance вне функции WndProc, то все работает, без дополнительного кода, т.е.:
Код:
HINSTANCE hInstance;

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, 
	WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT paintStruct;
	HDC hDC;

	switch (message)
	{
	case WM_CREATE:
		CreateWindow (TEXT("button"), TEXT("Text"), 
                WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
                10, 10, 120, 110, hwnd, (HMENU) 0, hInstance, NULL);
Как быть, что делать? Что лучше использовать ?
L6go1as вне форума Ответить с цитированием
Старый 17.01.2012, 20:02   #2
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
Сообщение

Лучше объявить её в глобальной области.
Код:
HINSTANCE g_hInst;

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
    g_hInst = hInstance;

    ...
}
StIX-S вне форума Ответить с цитированием
Старый 17.01.2012, 20:32   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Ясно, но вот другой вопрос...
Если объявлять глобально, не проще сохранить hInstance ?
Таким образом везде, где оно используется - оно будет, без изменений.

Или есть какая ни будь особенность?
L6go1as вне форума Ответить с цитированием
Старый 17.01.2012, 21:22   #4
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

В смысле "сохранить" ? Глобальные переменные и так сохраняют своё значение пока не будет завершено приложение или если вы сами не измените её значение.
StIX-S вне форума Ответить с цитированием
Старый 17.01.2012, 21:35   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Сохранить в плане не изменять, а оставить как есть.
L6go1as вне форума Ответить с цитированием
Старый 17.01.2012, 22:07   #6
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

Ну так значение и так не изменится, если его не изменить самому.
StIX-S вне форума Ответить с цитированием
Старый 18.01.2012, 14:04   #7
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Ясно, но вот другой вопрос...
Если объявлять глобально, не проще сохранить hInstance ?
Таким образом везде, где оно используется - оно будет, без изменений.

Или есть какая ни будь особенность?
Значение hinstance всегда разное (т.е. не статическое).
К примеру для получения hinstance можно использовать GetModuleHandleA(0).
zotox вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявление переменных Hemul Общие вопросы C/C++ 11 06.02.2011 16:37
Объявление процедуры Progs1024 Общие вопросы Delphi 11 02.12.2009 14:44
Объявление класса Александр Елис Помощь студентам 2 22.10.2009 21:58
объявление массива Crasty Помощь студентам 7 05.11.2008 17:18