|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 14, 2003 12:01:04 Возможно ли в ListBox добавить CheckBox-ы и как с ними работать. В Borland C++ Builder-е есть компонент CheckListBox в, котором слева от строк располагаются CheckBox-ы как такое реализовать? |
|
|
Дата: Авг 14, 2003 14:42:22 pas Подсказка -- это рисунки :) |
|
|
Дата: Авг 15, 2003 00:47:18 С LBS_OWNERDRAWFIXED, а тем более с субклассингом можновсё, но геморойно, проще то ни как? Не обязательно именно ListBox с CheckBox-ами может другой какой контрол позволяет вывести неизвестрое количество строк с возможностью отметить их по человечески (простое множественное выделение всёже не очень удобно)? |
|
|
Дата: Авг 15, 2003 03:14:34 pas Прочитайте ещё раз подсказку Эдмонда. С OWNERDRAW это не связяно :-) |
|
|
Дата: Авг 15, 2003 08:46:55 Можешь использовать "SysTreeView32" со стилем TVS_HASBUTTONS |
|
|
Дата: Авг 15, 2003 11:22:39 Quantum Если рисовать не через обработку сообщения WM_DRAWITEM тогда как? |
|
|
Дата: Авг 15, 2003 15:03:04 XListCtrl на Codeguru.net - там как раз это реализовано. могешь посмотреть. |
|
|
Дата: Авг 15, 2003 15:53:47 · Поправил: pas Пробую сделать CheckListBox hBmp1 - не отмеченный ЧекБокс. hBmp2 - отмеченный ЧекБокс. однако ЧекБоксы ведут себя как РадиоКнопки:Выделяется (картинка отмеченного Чекбокса)только тот ЧекБокс который был последним нажат. Обработка WM_DRAWITEM следующим образом:
wmdraw:
mov ebx,[lparam]
cmp [dis.itemAction],ODA_SELECT
jne .drugie
invoke CreateCompatibleDC,[dis.hDC]
mov [hMem],eax
mov eax,[dis.itemData]
cmp eax,[hBmp1]
jne .chenge
invoke SendMessage,[hList],LB_SETITEMDATA,[dis.itemID],[hBmp2]
mov eax,[hBmp2]
mov [dis.itemData],eax
jmp .prod
.chenge:
invoke SendMessage,[hList],LB_SETITEMDATA,[dis.itemID],[hBmp1]
mov eax,[hBmp1]
mov [dis.itemData],eax
.prod:
invoke SelectObject,[hMem],[dis.itemData]
mov [oldDC],eax
mov eax,[dis.rcItem.right]
sub eax,[dis.rcItem.left]
mov ecx,[dis.rcItem.bottom]
sub ecx,[dis.rcItem.top]
invoke BitBlt,[dis.hDC],[dis.rcItem.left],[dis.rcItem.top],eax,ecx,[hMem],1,1 ,SRCCOPY
invoke SendMessage,[dis.hwndItem],LB_GETTEXT,[dis.itemID],Buf
invoke GetTextMetrics,[dis.hDC],tm
mov ecx,[dis.rcItem.bottom]
add ecx,[dis.rcItem.top]
sub ecx,[tm.tmHeight]
shr ecx,1
CountString Buf
dec eax
invoke TextOut,[dis.hDC],20,ecx,Buf,eax
invoke SelectObject,[hMem],[oldDC]
invoke DeleteDC,[hMem]
jmp finish
.drugie:
invoke CreateCompatibleDC,[dis.hDC]
mov [hMem],eax
invoke SelectObject,[hMem],[dis.itemData]
mov [oldDC],eax
mov eax,[dis.rcItem.right]
sub eax,[dis.rcItem.left]
mov ecx,[dis.rcItem.bottom]
sub ecx,[dis.rcItem.top]
invoke BitBlt,[dis.hDC],[dis.rcItem.left],[dis.rcItem.top],eax,ecx,[hMem],1,1 ,SRCCOPY
invoke SendMessage,[dis.hwndItem],LB_GETTEXT,[dis.itemID],Buf
invoke GetTextMetrics,[dis.hDC],tm
mov ecx,[dis.rcItem.bottom]
add ecx,[dis.rcItem.top]
sub ecx,[tm.tmHeight]
shr ecx,1
CountString Buf
dec eax
invoke TextOut,[dis.hDC],20,ecx,Buf,eax
invoke SelectObject,[hMem],[oldDC]
invoke DeleteDC,[hMem]
jmp finish
rst я в сях очень слаб :-(. |
|
|
Дата: Авг 15, 2003 22:35:17 pas Берёте ListView (SysListView32 + LVS_REPORT) и цепляете к итемам картинки... элементарно, вроде. AFAIK, в последних версиях comctl32 тоже поддерживает картинки в ListBox'ах. |
|
|
Дата: Авг 16, 2003 02:09:17 Quantum Сейчас уже стало интересно реализовать именно CheckListBox потому, что не получается (странно наверно). |
|
|
Дата: Авг 16, 2003 04:45:02 Вроде бы сделал. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070 |