|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||||
hBitmap09.05.2010, 18:27. Показов 4082. Ответов 22
Метки нет (Все метки)
Всем привет. Помогите пожалуйста разобраться с hBitmap.
Я "переделываю" кнопку CommandButton через WinAPI. С начала назначяя её стиль как BS_BITMAP
Но я никак не могу получить hBitmap ни через сам WinAPI (с помощю функций LoadBitmap/LoadImage, hBitmap постоянно разный, то негативное число то позитивное, и кнопка так и не отображает BMP-шку) ни помещая BMP-шку с начала в ImageControl и передавая её hwnd...
0
|
|||||||||||
| 09.05.2010, 18:27 | |
|
Ответы с готовыми решениями:
22
WinApi HBITMAP Утекает память при использовании HBITMAP Рисование битмапов: (HBITMAP)SelectObject(hMemDC, hBitmap) выдаёт ошибку |
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 09.05.2010, 19:28 | ||
|
...а вообще, при LoadBitmap/LoadImage хэндл и не должен быть одинаковым. это раз. и два: ты перегруженному классу СButton пытаешся изменить стиль на НЕ Button? сомневаюсь, что это вообще может получится. ты-же окно субклассировал.
1
|
||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||||||||||||||||||||||
| 10.05.2010, 02:23 [ТС] | ||||||||||||||||||||||
|
Возможно из за этого я делаю несовместимые действия, впрочем вот оно как делаю (кстати вызов WinApi происходит из COBOL программы, не удивляйся коду )В первую очередь превращаю кнопку в стиль BITMAP WS-HANDLE = hwnd от CommandButton BM-SETSTYLE = 244 BS-BITMAP = 128 BN-PAINT = 1 (что бы кнопка нарисовалась сама заново)
Что я делаю не так, или в чём трабл? У самой кнопки есть такая опция (prperty) - называется "ImageName", сюда можно прописат название БМП-шки и она видна, как можно увидеть на скриншоте (кнопка-1), но эта опция уже не действует если кнопка в стиле XP, а передать БМП-шку через WinAPI я так и не сумел... Поможешь? Буду очень благодарен, уже несколько дней бьюсь с этим, и ни в какую...
0
|
||||||||||||||||||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 02:31 [ТС] | |
|
Вот значения полученные нажатием кнопки-1, то есть результат всего процесса что я описал
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 10.05.2010, 06:52 | |
|
а! ты хочешь, чтобы кнопка рисовала иконку?
а ты уверен, что у тебя функции данные возвращают? ты хоть проверь, что картинка-то загружается. а если не загружается - делай GetLastError() и получишь код ошибки.
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 15:26 [ТС] | |
|
LoadImage даёт ошибку 8
SetImage даёт ошибку 87 Сейчас буду смотреть что означают эти ошибки... Добавлено через 3 минуты Уже нашёл! LoadImage - ERROR_NOT_ENOUGH_MEMORY: Not enough storage is available to process this command. SetImage - ERROR_INVALID_PARAMETER: The parameter is incorrect. Ну, почему ошибка в SetImage я конечно понимаю, а вот почему в LoadImage - нет...
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 10.05.2010, 16:11 | ||
|
затем - монохромную картинку. и только если хоть какая-то картинка загрузится - делай ее LR-CREATEDIBSECTION но ей-богу, зачем тебе картинка при размере 16х16 пикселей - ума не приложу. даже иконки бывают и 16х16 и 32х32.
1
|
||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 16:31 [ТС] | |
|
ОК, сейчас попробую всё как говоришь
![]() А картинки 16х16 в кнопках - и для быстрой идентификации кнопки, и интерфейс с ними "радостнее", да и плюс ко всему, иногда я в кнопки сажаю только картинки, без текста... Посмотри скриншот и увидешь о чём я говорю
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 16:48 [ТС] | |
|
Загружает иконку хорошо (Return Code = 0), а в SetImage то же самое ERROR 87...
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 10.05.2010, 17:59 | |
|
с параметром IMAGE_ICON ( = 1 ) ?
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 19:07 [ТС] | |
|
Да, с параметром 1...
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 10.05.2010, 21:06 | ||
![]() должен быть хэндл иконки. интересно, что можно напутать в 2-х параметрах функции LoadIcon() ? там-же только хэндл приложения и строка с именем ресурса...
1
|
||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 10.05.2010, 21:40 [ТС] | |
|
Точно блин!!!
Уже мозга за мозгу заехала... Какой хорошо если там 00000?!!!Не знаю... Cтранно то, что передать название иконки/бмп-шки в виде hard-code не удаётся, компилятор выводит ошибку. Приходится объявлять константу, длинной соответствующую длинне названия (ArrayOfChar[1..x], в ином сучае Error типа "ресурс не найден"...
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 11.05.2010, 19:02 [ТС] | |
|
Блин! Точнее всё правильно, hIcon получен, а 0000000000 - это результат GetLastError.
Вот смотри, первые 4 цифры это результаты GetLastError, а внизу полученные данные, в том числе hIcon...
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||||||
| 11.05.2010, 19:05 [ТС] | ||||||
|
А вот сам код, кажется всё правильно написано...
0
|
||||||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 11.05.2010, 19:13 | |
|
т.е., все правильно, GetLastError нигде ошибок не дает, но иконка не отображается?
![]() пробовал сделать Invalidate() на кнопку?
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 12.05.2010, 00:50 [ТС] | |
|
Не совсем, есть 1 GetLastError с ошибкой, последний шаг - BM-SETIMAGE
Return-Code = 87, ERROR_INVALID_PARAMETER Invalidate() не пробовал, попробую и напишу как дела... ![]() Добавлено через 3 часа 48 минут Invalidate() если я правильно понял это метод для "перерисовки" объектов заново?! В таком случае не действует, то есть не в этом причина. Почему-то именно в SetImage ошибка параметра (EC 87), но какого и почему не понятно...
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 12.05.2010, 11:52 | |
|
все уже должно работать...
![]() попробуй загрузить одну из стандартных иконок. может, твоя ему не нравится? какая версия OC? Добавлено через 4 часа 4 минуты случайно тоже возникла необходимость рисовать картинки в кнопках. долбался полтора часа с той-же проблемой, что и у тебя. ![]() оказалось, что при установке картинки в кнопку, картинка не копируется. т.е., кнопка получает только хэндл картинки в памяти. а сама картинка в памяти удаляется при выходе из функции, поскольку картинку загружал во временную переменную. сделал переменную для картинки глобальной, и загрузку в главной функции приложения - все работает. ...но какого фига в msdn ничего про это ни сном, ни духом???
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 12.05.2010, 16:44 [ТС] | |
|
Понятненько! Майкософт - молодци вообще, и обьяснения у них недоделанные, половину инфы должен рыскать на других сайтах...
![]() ![]() Ладно, спасибо за помощь, я сегодня наверное буду дома поздно, попробую сделать так как ты говоришь и отпишу результат! Но, всё же не очень понятно, ведь во время исполнения SetImage, handle кнопки ещё жив?! Тoгда почему ошибка 87?... Кстати, тогда получается что нужно создавать по одной глобальной переменной для каждой кнопки что ли??? К тому же, нельзя вынести процесс в отдельную субпрограмму (конкретной функции преобразования кнопки) вне главной формы (MainForm)? Облом, что за фигня такая, блин... ![]() P.S. иконки я использую стандартные от Windows XP, СО на моём компе Windows XP Home SP3
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|||
| 12.05.2010, 16:55 | |||
|
наверно поэтому вся такая инициализация, вроде загрузки картинок из ресурсов, делается Визардом VC++ в функции InitInstance() в классе CApp, там-же, где создается и сам MainForm. идиотизм, согласен... по идее, можно попробовать делать загрузку и в других функциях, но тогда нужно выделять память в хипе, чтобы переменная-хэндл не грохнулась при закрытии функции.
1
|
|||
| 12.05.2010, 16:55 | |
|
Помогаю со студенческими работами здесь
20
Копирование HBITMAP HBITMAP convert HBITMAP и bitmap HBITMAP в AUX_RGBImageRec Смещение HBITMAP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[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-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|