Button со стилем BS_OWNERDRAW - класс для быстрого создания кнопки
Была у меня проблема создания кнопки BS_OWNERDRAW. Впринципе проблему я решил, создав для себя удобный класс. Для загрузки и отрисовки картинок использовал стороннюю либу CxImage.
Цитата:
ПС: это черновая версия класса для кнопки, кому будет интересно, можно будет доработать. |
Вообще-то BUTTON со стилем BS_OWNERDRAW должна сама вызывать WM_DRAWITEM когда необходимо. Причём обработчик WM_DRAWITEM перерисовывает кнопку полностью (сама кнопка ничего не рисует).
______________________________________________ если будешь ваять кнопку руками: На событие нажатия ставим обработчик: Код:
case WM_LBUTONDOWN: Код:
case WM_LBUTONDOWN: Код:
case WM_CAPTURECHANGED: // кто-то вызвал SetCapture или ReleaseCapture |
Доделал класс для создания BS_OWNERDRAW кнопки, смотрим шапку темы.
|
crashtuak, ты по ходу дела не понял, как работает BS_OWNERDRAW. Саму кнопку трогать не надо, надо дописать к тому, кто её держит обработку сообщения WM_DRAWITEM и WM_MEASUREITEM. Чтобы посчитать свой размер, кнопка шлёт хозяину сообщение WM_MEASUREITEM с параметром MEASUREITEMSTRUCT, чтобы отрисоваться - сообщение WM_DRAWITEM параметром DRAWITEMSTRUCT. Всё остальное - делает сама.
Смысл в том, что у родителя есть какие-то детальки, которые он умеет рисовать и измерять. А дальше их можно запихать в BUTTON, LISTBOX, COMBOBOX и MENU. Везде будет выглядеть красиво, кроме кнопки. У ней автоматически не отрисуюется кнопочная часть. Борландовские библиотеки субклассят все контролы, а обработку WM_*ITEM перенаправляют тому, кто его прислал (CM_*ITEM = 3000 + WM_*ITEM), в дальнейшем обёртка над кнопкой всё и отрисовывает. |
pva, та я понял что я не понял, каким образом работает данная фича:). Я просто решил не углублятся, и пошел по пути наименшего сопротивления:)
|
тогда предлагаю ещё меньшее сопротивление: заранее загрузить PNG и отрисовать в HBITMAP, на форме сделать кнопку со стилем BS_BITMAP.
|
pva, а полупрозрачность картинки в таком случае сохраниться?
|
не сохранится, то и её можно отрисовать (берём фон кнопки...) А вот с красивым стилем будет облом. У меня, например, ХРюшка сразу рисует кнопку старым стилем, как только битмап ей назначишь
|
pva, а мне надо, что б у кнопки вообще небыло фона. Ну, будет время, буду чтото думать ёще. Хотя, и так работает, и довольно быстро (на слабом ноуте проверял).
|
Время: 07:50. |
Время: 07:50.
© OSzone.net 2001-