На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> virtual Listview
    Приветствую! Помогите пожалуйста с двумя вопросами касающихся Listview:

    1)Пытаюсь вывести virtual Listview, при этом subItems выодяться, а Item нет

    ExpandedWrap disabled
      .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 высота меняется у всех строк. А хотелось бы чтобы высота регулировалась от содержимого. Куда копать?
    Сообщение отредактировано: mikado3333 -
      С первым вопросом разобрался cmp на test
      ExpandedWrap disabled
        .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?

      ExpandedWrap disabled
        .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
        ;}
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0514 ]   [ 16 queries used ]   [ Generated: 25.04.24, 21:02 GMT ]