Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для AK3RN
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250

Вывести при помощи WinAPI картинку в окошко

06.05.2010, 14:51. Показов 2215. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Расскажу вкратце о проблеме:
имеется стандартное окошко со своим курсором и иконкой, т.е. код почти минимален.

пытаюсь вывести при помощи WinAPI картинку в окошко(код брал отсюда)

Картинку в ресурсы добавил, все прописал как нужно, код компилится с одной ошибкой:
error C2065: hBitmap: необъявленный идентификатор
Как написано на том сайте - hBitmap объявлен так:

HBITMAP hBitmap=LoadBitmap(hInstance, szImageName); //Связываем идентификатор картинки с ресурсом
Но весь трабл в том, что обьявлен он в функции WinMain, а используется в обработчике процессов WndProc и там вот эта часть кода:
C
1
2
3
4
hmdc=CreateCompatibleDC(hdc); 
SelectObject(hmdc, hBitmap);
GetObject(hBitmap, sizeof(bm), (LPSTR) &bm); 
BitBlt(hdc, 10,10, bm.bmWidth, bm.bmHeight, hmdc, 0,0, SRCCOPY);
не видит наш hBitmap. Если объявлять hBitmap глобально или WndProc, то непонятно откуда брать hInstance, т.е. ошибка не исправляется в любом случае. Как быть, подскажите, пожалуйста.

Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2010, 14:51
Ответы с готовыми решениями:

Как сделать всплывающее окошко при нажатии на картинку
Необходимо сделать чтобы на странице, при нажатии на картинку выскакивало вот такое окошко как на скриншоте: Проблема в том, что я не...

Копирование в буфер при помощи WinAPI
Приветствую. пытаюсь скопировать информацию с окна в буфер при помощи ф-ции WINAPI SendMessage. Вот как я ее объявил: Public...

Как разобрать emf-файл при помощи WinApi?
Господа, как используя функции winAPI получить информацию о полях Enhanced Metafile(данные о типе функций(типа LineTo(), Ellipse() и т.п. и...

7
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
06.05.2010, 21:58
При создании проекта WinAPI в студии.. там автоматически создается глобальная переменная hInst, в которую зщаписывается hInstance Вот этот самый hinst можно юзать из WndProc
1
 Аватар для AK3RN
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
07.05.2010, 10:37  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Monte-Cristo Посмотреть сообщение
При создании проекта WinAPI в студии.. там автоматически создается глобальная переменная hInst, в которую зщаписывается hInstance Вот этот самый hinst можно юзать из WndProc

Это понятно, что создается. Он даже передается аргументом в WinMain, но если мы пытаемся юзать его в WndProc, то выдается ошибка hInstance: необъявленный идентификатор, что в общем-то вполне обоснованно, т.к. hInstance не глобальная переменная
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.05.2010, 10:43
Цитата Сообщение от AK3RN Посмотреть сообщение
Это понятно, что создается.
А вот и не правда - нихрена тебе не понятно


Цитата Сообщение от Monte-Cristo Посмотреть сообщение
автоматически создается глобальная переменная hInst, в которую зщаписывается hInstance Вот этот самый hinst можно юзать из WndProc
Я же русским человеческим языком написал - в глобальную переменную hInst сохраняется локальная для WinMain hInstance ! ! !

Это означает, что ты должен использовать hInst, а не hInstance !!!
1
 Аватар для AK3RN
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
07.05.2010, 11:52  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
А вот и не правда - нихрена тебе не понятно



Я же русским человеческим языком написал - в глобальную переменную hInst сохраняется локальная для WinMain hInstance ! ! !

Это означает, что ты должен использовать hInst, а не hInstance !!!
Извините, невнимательно прочитал.
Спасибо за помощь.

Добавлено через 1 час 7 минут
Протестировал. Что юзаю hInst, что hInstance - результат один: необъявленный идентификатор.
0
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,504
Записей в блоге: 6
07.05.2010, 15:30
AK3RN, выложите весь код.
0
 Аватар для AK3RN
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
07.05.2010, 15:36  [ТС]
Цитата Сообщение от snake32 Посмотреть сообщение
AK3RN, выложите весь код.
Спасибо, я уже разобрался. Вот тут обсуждалась точно такая же проблема. В WndProc написал так:

C
1
long hInst= GetWindowLong(hWnd, GWL_HINSTANCE);
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
08.05.2010, 01:46
AK3RN, и теперь у тебя при каждом сообщение тратится процессорное время на получение HINSTANCE.. Это говнокод.. Хотя бы сделай hInst статическим... Но как по мне, это тот самый случай, где целесообразней применить глоабльную переменную. И как я писал выше - в Visual Studio в проекте так и генерируется. Это был повод не тупо передрать мой вариант (подставить в лоб hInst вместо hInstance), а просто в WinMain делать hInst = hInstance, и объявить глобально HINSTANCE hInst;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2010, 01:46
Помогаю со студенческими работами здесь

Как при помощи WinAPI создать прозрачные окна?
Как при помощи WinAPI создать прозрачные окна?

Вставить картинку в RxRichEdit при помощи кнопки
Извините за глупый вопрос, как можно вставить картинку в RxRichEdit при помощи кнопки? Добавлено через 55 минут кто-нибудь,...

Как максимально быстро вывести на экран картинку в Windows 7 через winapi на Си?
Крайне важна высокая скорость вывода на экран, т. к. картинками буду рисовать элементы интерфейса моей программы. Я пока нашёл один...

На новом десктопе открыть калькулятор при помощи WinAPI (найти и исправить ошибки в коде)
Не знаю как уже быть. Нужно на новом десктопе открыть калькулятор при помощи windows API Есть код. Но работает только на блокноте...

Вывести из БД все записи при помощи while()
Код: $query = "SELECT * FROM news LIMIT 8"; $sql = mysql_query($query) or die(mysql_error()); while ($res =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru