![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
![]()
здравствуйте.
Хочу создать чекбокс со стилем BS_OWNERDRAW, чтобы нарисовать свою "галочку". Но оказалось, что при наличии стиля BS_OWNERDRAW, свойства чекбокса пропадают. Т.е. нельзя использовать сообщения BM_SETCHECK и BM_GETCHECK. Как же быть? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Обрабатывать BM_SETCHECK/BM_GETCHECK самому.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
![]() |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
![]()
никто меня не научит?
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 28.03.2013
Сообщений: 14
|
![]()
Привет BLACK_RAIN!
При использовании BS_OWNERDRAW вся отрисовка выполняется вручную. То есть сообщения BM_SETCHECK/BM_GETCHECK не посылаются. Но посылаются сообщения WM_DRAWITEM и WM_COMMAND. В сообщении WM_DRAWITEM происходит полная отрисовка , там же можно устанавливать флаги переключения (кустарно в какой нибудь переменной или массиве, если кнопок несколько). В сообщении WM_COMMAND отлавливаются нажатия на кнопку. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
![]() |
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 28.03.2013
Сообщений: 14
|
![]() Цитата:
Что касается определения идентификатора кнопки, то в сообщении WM_DRAWITEM , система посылает в параметре LPARAM указатель на структуру DRAWITEMSTRUCT. В ней, во втором поле (CtlID) как раз идентификатор кнопки. Идентификатор будет номером ячейки для массива, в котором вы будете менять (TRUE - галочка стоит, FALSE - галочка снята) Вы на дельфи пишите? В любом поисковике можно найти код кнопки с пользовательской отрисовкой. Я могу предложить код отрисовки обычной кнопки, правда на FreeBasic, но там чистый WINAPI (разобраться не сложно). Рисовать checkbox по тому же принципу. |
|
![]() |
![]() |
![]() |
#8 | |||
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
![]() Цитата:
Цитата:
Цитата:
|
|||
![]() |
![]() |
![]() |
#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) |
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Почитайте на досуге: 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 |