![]() |
|
Модераторы: Alexeis |
![]()
|
|
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: нет Всего: 106 |
пусть ImageList сам построит маску для этого нужно не создавать список, а загружать его из ресурса, например так:
в ресурсе IDB_MYBUTTONIMAGES при этом должен быть битмап с 32-пиксельными картинками, расположенные горизонтально, друг за другом, а ключ прозрачности задается параметром crMask (в данном случае белый), либо первым пикселом этого битмапа (при этом нужно еще поставить при загрузке флаг LR_LOADTRANSPARENT, но т.к. в CE флаги к ImageList_LoadImage не поддерживаются, то такой вариант не пройдет) аналогично и с ImageList_LoadBitmap (только параметров меньше) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Вроде получилось.. Теперь другая проблема, иконка на кнопке отображается.. а самих очертаний кнопки нет.. мне их вручную рисовать или можно както сначала кнопку отрисовать, а потом уже иконку на ней?
P.S. Перехватываю сообщение WM_DRAWITEM Это сообщение отредактировал(а) Brodyaga - 4.6.2009, 13:57 |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
Если рисуешь в WM_DRAWITEM тебе придется отрисовывать все состояния кнопки самому. -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
ясно... а рисовать картинку и картинку со сдвигом(при нажатии), а также очищать область.. это всё как я понимаю в WM_PAINT делать? в связи с этим вопрос... у каждой кнопки свою процедуру делать? или в общей рисовать? как лучше сделать?
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
Brodyaga, тебе приходит DRAWITEMSTRUCT которая содержит
ID твоей кнопки и HWND вот проверяй и рисуй на каждой кнопке разное. Если на каждой кнопке одинаковое, тогда проверять HWND и ID не надо. Ну а вообще конечно рисовать для каждой кнопки свое как-то не очень, я понимаю одну-две ,а когда их много....... -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
ну а рисовать то в оконной процедуре кнопки в событии WM_PAINT ? просто одну процедуру на все кнопки назначить? а как тогда там узнать какой айди и состояние какое?
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
Brodyaga, У тебя что, для каждой кнопки есть своя оконная процедура?
WM_DRAWITEM надо ловить в окне которое является родителем для твоих кнопок, то окно в котором они находятся. -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Нет. Но я могу одну на все сделать, а в ней уже смотреть айди кнопки. а где рисовать то? в процедуре кнопки или форму? Тоесть я не могу догнать механизм... я думаю так.. - перехватываю в процедуре главного окна сообщение WM_DRAWITEM, запоминаю глобальную структуру LPDRAWITEMSTRUCT и вызываю перерисовку кнопки - в процедуре кнопки, в событии WM_PAINT в зависимости от глобальной структуры LPDRAWITEMSTRUCT рисовать определённую кнопку и картинку на ней, в определённом состоянии. так? или я чтото не догоняю? P.S. Извините за, может быть, глупые вопросы.. Просто с винапи почти не работал |
|||
|
||||
| Andrey44 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
Brodyaga, ты просто не понял.
Правильно.
Зачем тебе глобальная структура? Тебе приходит LPDRAWITEMSTRUCT в lParam. Попробую на примере.
-------------------- ????? ??, ??????? ?????. |
||||
|
|||||
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: нет Всего: 1 |
Brodyaga, по мне так быстрее и полезнее для опыта будет создание своего контрола кнопки, благо делать то там почти нечего - отрисовывать в WM_PAINT, да клики отлавливать. в этом случае кнопка это окно со своей процедурой. остается создавать объекты, делов то.
Это сообщение отредактировал(а) Emura - 5.6.2009, 13:02 |
|||
|
||||
| Brodyaga |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Хочу это добить
так я так и делал сначала.. но рисовать то всё надо же в WM_PAINT? между состояниями кнопки(нажата, отжата) мне надо область кнопки очищать, так как картинка для нажатой кнопки немного смещается. а очищение почемуто не работало:
вот я и подумал, что не работает из-за того, что рисую не в WM_PAINT и решил в WM_DRAWITEM Invalidate вызывать, чтобы рисовать уже в WM_PAINT. Или можно рисовать и в WM_DRAWITEM? Тогда почему очистка не работает? |
||||||||
|
|||||||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Извините, понял свой косяк.
Надо было не так прямоугольник рисовать, я получал кнопку относительно всего диалогового окна, а надо было просто размеры:
вот так! Сейчас вроде работает как надо! Andrey44,GremlinProg спасибо! +1! |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
Даже нужно, там-же приходит в LPDRAWITEMSTRUCT lpdis->hdc
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
![]()
|
| Правила форума "Программирование мобильных устройств" | |
|
|
Раздел посвящен программированию мобильных устройств. Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п), |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |