Как сделать иконку на кнопке справа от текста
При помощи сообщение BM_SETIMAGE на кнопку можно добавить иконку, в обычном режиме она будет располагаться слева от надписи. Для одной из моих программ понадобилось разместить иконку на кнопке справа от надписи. Да, я в курсе про самостоятельную отрисовку кнопок, про субклассирование и прочие навороты, но хотелось обойтись малой кровью. Поразмыслив, я решил задачу с помощью расширенного стиля окна WS_EX_LAYOUTRTL, который применяется к отдельно взятой кнопке. По прямому назначению он используется для корректной отрисовки содержимого окна на арабском или других языках с направлением письма справа-налево. Как оказалось, для иконок это тоже неплохо работает.Вот код для переключения иконки на положение справа. Подразумевается, что иконка уже ранее была установлена на кнопку при инициализации окна или при создании элемента управления.
Code (Assembler) : Убрать нумерацию
- ; Установить иконку справа от текста
- invoke GetDlgItem,[hwnddlg],ID_BUTTON
- mov ebx,eax
- ; Добавить стиль Right-to-Left
- invoke GetWindowLong,ebx,GWL_EXSTYLE
- or eax,WS_EX_LAYOUTRTL
- invoke SetWindowLong,ebx,GWL_EXSTYLE,eax
- ; Обновить иконку
- invoke SendMessage,ebx,BM_GETIMAGE,IMAGE_ICON,0
- invoke SendMessage,ebx,BM_SETIMAGE,IMAGE_ICON,eax
Code (Assembler) : Убрать нумерацию
- ; Установить иконку слева от текста
- invoke GetDlgItem,[hwnddlg],ID_BUTTON
- mov ebx,eax
- ; Убрать стиль Right-to-Left
- invoke GetWindowLong,ebx,GWL_EXSTYLE
- and eax,not WS_EX_LAYOUTRTL
- invoke SetWindowLong,ebx,GWL_EXSTYLE,eax
- ; Обновить иконку
- invoke SendMessage,ebx,BM_GETIMAGE,IMAGE_ICON,0
- invoke SendMessage,ebx,BM_SETIMAGE,IMAGE_ICON,eax
При таком способе размещения иконка зеркалируется по вертикали, так что в некоторых ситуациях получается обойтись одной иконкой вместо двух. Например, кнопки со стрелочками в два направления. Экономия места в программе, однако. Но если иконка должна быть с определенным изображением, то зеркалировать ее вам придется самостоятельно еще до включения в ресурсы.
В приложении пример программы с исходным текстом, которая позволяет переключить изображение на кнопке слева или справа от надписи.
Просмотров: 907 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария