|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.03.2013, 09:49 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
BS_CHECKBOX с ручной отрисовкой
здравствуйте.
Хочу создать чекбокс со стилем BS_OWNERDRAW, чтобы нарисовать свою "галочку". Но оказалось, что при наличии стиля BS_OWNERDRAW, свойства чекбокса пропадают. Т.е. нельзя использовать сообщения BM_SETCHECK и BM_GETCHECK. Как же быть? |
25.03.2013, 13:40 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Обрабатывать BM_SETCHECK/BM_GETCHECK самому.
|
25.03.2013, 13:58 | #3 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
27.03.2013, 09:37 | #4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
никто меня не научит?
|
28.03.2013, 21:42 | #5 |
Пользователь
Регистрация: 28.03.2013
Сообщений: 14
|
Привет BLACK_RAIN!
При использовании BS_OWNERDRAW вся отрисовка выполняется вручную. То есть сообщения BM_SETCHECK/BM_GETCHECK не посылаются. Но посылаются сообщения WM_DRAWITEM и WM_COMMAND. В сообщении WM_DRAWITEM происходит полная отрисовка , там же можно устанавливать флаги переключения (кустарно в какой нибудь переменной или массиве, если кнопок несколько). В сообщении WM_COMMAND отлавливаются нажатия на кнопку. |
29.03.2013, 14:06 | #6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
29.03.2013, 17:21 | #7 | |
Пользователь
Регистрация: 28.03.2013
Сообщений: 14
|
Цитата:
Что касается определения идентификатора кнопки, то в сообщении WM_DRAWITEM , система посылает в параметре LPARAM указатель на структуру DRAWITEMSTRUCT. В ней, во втором поле (CtlID) как раз идентификатор кнопки. Идентификатор будет номером ячейки для массива, в котором вы будете менять (TRUE - галочка стоит, FALSE - галочка снята) Вы на дельфи пишите? В любом поисковике можно найти код кнопки с пользовательской отрисовкой. Я могу предложить код отрисовки обычной кнопки, правда на FreeBasic, но там чистый WINAPI (разобраться не сложно). Рисовать checkbox по тому же принципу. |
|
29.03.2013, 17:50 | #8 | |||
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Цитата:
Цитата:
Цитата:
|
|||
29.03.2013, 18:37 | #9 | |
Пользователь
Регистрация: 28.03.2013
Сообщений: 14
|
Цитата:
but=CreateWindowEx(0,"Button","My Button",WS_VISIBLE Or WS_CHILD Or BS_OWNERDRAW,10,10,80,30,hwnd,Cast( HMENU,1),Hinst,0) В данном случае but - хендл окна. А 1 - идентификатор кнопки. Получаем мы его как вы сказали в сообщении WM_COMMAND , но в LOWORD(WPARAM), а не в LOWORD(LPARAM). Но даже если вы зададите идентификатор равный 1001 , что мешает вычесть 1000? К примеру массив 1...10 ID = 1001 обращение к массиву array(Loword(wparam)-1000) |
|
29.03.2013, 22:34 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Почитайте на досуге: http://en.wikipedia.org/wiki/Associa...iners_(C%2B%2B)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблемы с отрисовкой на экране | Stilet | Компьютерное железо | 9 | 28.11.2010 17:11 |
Проблемы с отрисовкой в Direct3D | Trapper | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 28.07.2009 18:49 |
Проблема с отрисовкой в PaintBox Делфи | VSemV | Помощь студентам | 7 | 26.05.2009 13:32 |
Проблема с отрисовкой дочрних областей. | DJ_Rain | Win Api | 0 | 30.04.2009 18:31 |
HELP!!! Проблема с отрисовкой | frai | Общие вопросы Delphi | 1 | 11.05.2007 21:17 |