powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Картинка + текст на стандартной кнопке.
1 сообщений из 1, страница 1 из 1
Картинка + текст на стандартной кнопке.
    #38664558
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это даже не вопрос.
В дополнение к этой теме. 13058162
Понадобилось нарисовать картинки + текст на 2-х кнопках (которые в т.ч. могут быть Disabled).
Экспериментировал, сделал тестовый проект. М.б. кому пригодится.

Не считая DrawIconEx на hdc есть 2 метода (я бы даже сказал 3).

1. BM_SETIMAGE message
Код: vbnet
1.
    SendMessage Command1.hwnd, BM_SETIMAGE, IMAGE_ICON, ByVal lngIcon


Оптимален на Виста и выше, неважно включены ли темы или классика.
Преимущество обусловлено тем, что в состоянии Disabled картинка становится "стильно-матовой", при этом остается цветной - используется одна картинка.

2. BCM_SETIMAGELIST message
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Type BUTTON_IMAGELIST
  himl As Long
  margin As RECT
  uAlign As Long
End Type

SendMessage Command1.hwnd, BCM_SETIMAGELIST, 0, btn_iml


Используется ImageList из 6 картинок, каждая из которых отвечает состоянию кнопки.
Ну например для Disabled можно сделать серенькую.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
enum PUSHBUTTONSTATES {
	PBS_NORMAL = 1,
	PBS_HOT = 2,
	PBS_PRESSED = 3,
	PBS_DISABLED = 4,
	PBS_DEFAULTED = 5,
	PBS_STYLUSHOT = 6,
};


Метод работает на любой OS >=виста а также на XP-при включенной тематике.
Оптимален на XP-при включенной тематике, т.к. первый метод на XP не работает.
На XP(стиль классика) если нужно Disabled не работает (всегда выводит первую картинку).

3. По сути тоже самое что и 2.
Только используем 2 ImageList- каждый с единственной картинкой - для нормального состояния и для Disabled.
Смену состояния кнопки (Enabled/Disabled) отслеживаем через customdraw, тупо переназначаем ImageList-ы.
Имеет смысл только на XP при классическом стиле.
По другому у меня нормально на XP+классика не получилось.

Всякие margin-ы проще задавать размером иконки. Т.е. я например использовал 26x16 с эффективной 16x16 по центру.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Картинка + текст на стандартной кнопке.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]