· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Возможно ли в ListBox добавить CheckBox-ы.

Посл.отвђт Сообщен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