Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Кнопка + Рисунок/Иконка

Ответить
Настройки темы
Win32 API - Кнопка + Рисунок/Иконка

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Приветствую всех еще раз. Подскажите как средствами WinAPI загрузить из ресурса приложения в кнопку битмап или иконку. Вроде что надо использовать функции LoadIcon или LoadBitmap. А вот как их использовать? Примеров как всегда куча, а чтобы "на показ" исходники с компилированным файлом - нет. Интересует использование функции SendMessage при таких параметрах. Сделайте кто-нибудь простецкий пример и приаттачьте.

Отправлено: 15:54, 17-07-2007

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата Maksim V:
а чтобы "на показ" исходники с компилированным файлом - нет
...а вам тогда останется только заниматься "копипастингом"??

LoadImage function
BM_SETIMAGE message

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 01:01, 18-07-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
...а вам тогда останется только заниматься "копипастингом"??
Я буду стараться в поте лица. Мне все равно таких кнопок около 20 надо сделать. Так что хотя бы пример с одной такой кнопкой не помешал бы.

Отправлено: 01:12, 18-07-2007 | #3


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Maksim V
Сам не проверял,но походу делатся должно следующим образом.
Ресурс тогда должен объявлятся примерно так:
Код: Выделить весь код
MyBitmap  BITMAP   MyBitmap.bmp
Функцией LoadImage мы загружаем картинку, получая её описатель.Потом отправляем уже созданной кнопке сообщение BM_SETIMAGE.Происходить это должно скорее всего в главной оконной процедуре(если главное окно приложения вообще существует) при получении сообщения WM_PAINT.
Код: Выделить весь код
var
 g_hBmp: HANDLE
...

 g_hBmp := LoadImage(hInstance, // понятно
                                      'MyBitmap', // Название ресурса
                                      IMAGE_BITMAP, // тип ресурса
                                      0,
                                      0,
                                      LR_DEFAULTCOLOR); 

 SendMessage(hBtn, // описатель кнопки, изображение которой надо поменять
                        BM_SETIMAGE,
                        IMAGE_BITMAP, // тип изображения
                        g_hBmp);
Что-то в этом роде.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 01:51, 18-07-2007 | #4


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar bitmap + button.rar
(10.4 Kb, 34 просмотров)

эээ... я уже ничего не соображаю, но состряпал архивчик с ресурсами. посмотрите пожалуйста и подправьте. тем более я наверное там уже и код попутал, потому что компилятор ругается на неизвестные переменные. хз что и куда...

Отправлено: 03:01, 18-07-2007 | #5


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Maksim V
Дельфийский компилятор выдаёт две ошибки:
1. Компилятор Дельфи,как это ни странно,не знает такого типа как HANDLE.Просто меняешь его на HWND, DWORD или Cardinal.Это походу всё одно и то же.
2. Неизвестная переменная hBtn.
Дык,правильно.Я привёл её чисто для примера,расчитывая на то,что ты в состоянии добыть самостоятельно описатель кнопки.Это можно сделать с помощью функции FindWindowEx.

Попробовал сам сделать пример.Отправлять сообщение BM_SETIMAGE необходимо во время обработки WM_INITDIALOG.Но у меня почему-то не получается сделать так,чтобы на кнопке отображались и картинка,и текст одновременно.По отдельности работает,а вместе никак.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 21:29, 18-07-2007 | #6


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я совсем запутался с этим WinAPI. Приаттачьте пожалуйста архивчик, когда вы переделали мой пример, если вас не затруднит.

Отправлено: 00:21, 19-07-2007 | #7


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar bitmap + button.rar
(11.4 Kb, 61 просмотров)

Maksim V
В общем,примерно так.Но есть одно НО...даже два.

Как вы создаёте файл ресурсов??Дело в том,что функция LoadImage должна в качестве второго параметра получать указатель на название ресурса(bitmap в нашем случае).В нашем случае bitmap явно не назывался "MY_BITMAP",а назывался он просто идентификатором 101.Поэтому функция не могла загрузить ресурс.С помощью программы ResHack я поменял название bitmap'а.
Теперь скомпилированный файл вроде работает.

Второе НО заключается в том,что существуют походу некоторые трудности с одновременным выводом на кнопку и картинки,и текста.Если делать это средствами WinAPI,то это не так-то просто.Если я неправ,пусть меня поправят.А пока мы имеем только кнопку с картинкой.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 03:20, 19-07-2007 | #8


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Юлагодарю. Просто я не указывал PChar(<ресурс>) и из-за этого картинка не грузилась в кнопку. Хммм... А мне интересно а в WinXP кнопка с картинкой отображаться должна с классическим стилем оформления или с манифестом? И как тогда добиться стиля flat? То есть интересует такой стиль, когда рамок кнопки (как бы сливается с диалогом) не видно и очертания кнопки показываются когда наводишь курсор на кнопку. Такое хотя бы возможно?

Отправлено: 23:40, 19-07-2007 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Кнопка + Рисунок/Иконка

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - [решено] фоновый рисунок oleg1967 Microsoft Windows 2000/XP 3 04-12-2008 10:04
[решено] html рисунок dima1981 Вебмастеру 2 09-05-2008 21:59
Одинаковый рисунок на рабочий стол zmaximka Microsoft Windows NT/2000/2003 1 06-03-2007 02:57
Фоновый рисунок kda12 Microsoft Windows NT/2000/2003 6 06-02-2007 11:53
Как достать рисунок badze Хочу все знать 3 26-02-2004 18:26




 
Переход