Как сделать иконку на кнопке справа от текста
25.06.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
При помощи сообщение 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
Читать статью целиком »
Просмотров: 737 | Комментариев: 0