Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.216.36] |
|
Сообщ.
#1
,
|
|
|
Приветствую! Помогите пожалуйста с двумя вопросами касающихся Listview:
1)Пытаюсь вывести virtual Listview, при этом subItems выодяться, а Item нет .wmnotify: mov esi,[lparam] cmp [esi + NMHDR.code],LVN_GETDISPINFO jnz .defwndproc mov eax,[TableZap] cmp [esi + NMHDR.hwndFrom],eax jnz .defwndproc ;!Если мы здесь то это значит виртуальный listview и esi = LV_DISPINFO lea esi,[esi + LV_DISPINFO.item] cmp [esi + LV_ITEM.mask],LVIF_TEXT jnz .defwndproc mov edx,[esi + LV_ITEM.iSubItem] cmp edx,0 jnz @f mov [esi + LV_ITEM.pszText],_error @@: mov [esi + LV_ITEM.pszText],_class jmp .finish[attach=49026] Полный файлnew_1.txt (3,04 Кбайт, скачиваний: 126) 2) Как задать разную высоту строк? При отлавливании сообщения WM_MEASUREITEM высота меняется у всех строк. А хотелось бы чтобы высота регулировалась от содержимого. Куда копать? |
Сообщ.
#2
,
|
|
|
С первым вопросом разобрался cmp на test
.wmnotify: ;{ mov esi,[lparam] cmp [esi + NMHDR.code],LVN_GETDISPINFO jnz .defwndproc mov eax,[TableZap] cmp [esi + NMHDR.hwndFrom],eax jnz .defwndproc ;!Если мы здесь то это значит виртуальный listview и esi = LV_DISPINFO lea esi,[esi + LV_DISPINFO.item] test [esi + LV_ITEM.mask],LVIF_TEXT jz .defwndproc mov edx,[esi + LV_ITEM.iSubItem] cmp [esi + LV_ITEM.iSubItem],0 jnz @f mov [esi + LV_ITEM.pszText],_error jmp .finish @@: lea eax,[esi + LV_ITEM.pszText] invoke wsprintf, [esi + LV_ITEM.pszText],fmt_val,[esi + LV_ITEM.iSubItem] jmp .finish ;} Появился новый вопрос по поводу логики. Я добавил при создании стиль LVS_OWNERDRAWFIXED и при этом использую для получение текста LVM_GETITEMTEXT, хотя при виртуальном списке это не должно работать. И собственно почему работает LVM_GETITEMTEXT при LVS_OWNERDATA при обработке сообщения WM_DRAWITEM? .wmdrawitem: ;{ mov ebx,[lparam] cmp [ebx + DRAWITEMSTRUCT.CtlType],ODT_LISTVIEW ;! Проверяем что сообщение от listview jnz .defwndproc cmp [ebx + DRAWITEMSTRUCT.itemAction],ODA_FOCUS ;! Узнаем трубуемую операцию рисования jz .defwndproc mov edi,[Brush6] ;! Устанавливаем цвет выбранной строки cmp [ebx + DRAWITEMSTRUCT.itemState],ODS_FOCUS + ODS_SELECTED ;! Если строка выбрана щелчком ЛКМ то jz @f ;! переходим к следующим шагам mov edi,[Brush3] ;! Если не строка не выбрана, то цвет выбранной строки = цвету фона @@: mov esi,1 mov [rcItem.left], LVIR_BOUNDS invoke GetClientRect, [ebx + DRAWITEMSTRUCT.hwndItem],rcTable ;! Получение rect таблицами invoke SendMessage, [ebx + DRAWITEMSTRUCT.hwndItem],LVM_GETITEMRECT,\ ;! Получение rect итема [ebx + DRAWITEMSTRUCT.itemID],rcItem mov [lvi.iSubItem],0 mov [lvi.pszText],ListViewbuf mov [lvi.cchTextMax],1000 invoke SendMessage, [ebx + DRAWITEMSTRUCT.hwndItem],LVM_GETITEMTEXT,[ebx + DRAWITEMSTRUCT.itemID],lvi ;! Получаем текст итема invoke SelectObject, [ebx + DRAWITEMSTRUCT.hDC],edi ;! Рисуем итем mov edi,eax inc [rcItem.bottom] invoke Rectangle, [ebx + DRAWITEMSTRUCT.hDC],[rcItem.left],[rcItem.top],[rcItem.right],[rcItem.bottom] add [rcItem.left],5 invoke DrawText, [ebx + DRAWITEMSTRUCT.hDC],ListViewbuf,-1,rcItem,DT_SINGLELINE+DT_VCENTER+DT_END_ELLIPSIS .loop: mov [rcSubItem.left],LVIR_BOUNDS mov [rcSubItem.top],esi invoke SendMessage, [ebx + DRAWITEMSTRUCT.hwndItem],LVM_GETSUBITEMRECT,\ ;! Получение rect сабитема [ebx + DRAWITEMSTRUCT.itemID],rcSubItem mov [lvi.iSubItem],esi mov [lvi.pszText],ListViewbuf mov [lvi.cchTextMax],1000 invoke SendMessage, [ebx + DRAWITEMSTRUCT.hwndItem],LVM_GETITEMTEXT,[ebx + DRAWITEMSTRUCT.itemID],lvi ;! Получаем текст сабитема inc [rcSubItem.bottom] ;! Рисуем сабитем dec [rcSubItem.left] invoke Rectangle, [ebx + DRAWITEMSTRUCT.hDC],[rcSubItem.left],[rcSubItem.top],[rcSubItem.right],[rcSubItem.bottom] invoke DrawText, [ebx + DRAWITEMSTRUCT.hDC],ListViewbuf,-1,rcSubItem,DT_SINGLELINE+DT_CENTER+DT_VCENTER+DT_END_ELLIPSIS inc esi cmp esi,12 jnz .loop invoke SelectObject, [ebx + DRAWITEMSTRUCT.hDC],edi ;! Возвращаем кисть jmp .finish ;} |