|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||||
hBitmap09.05.2010, 18:27. Показов 4052. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|