Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2015, 16:28   #1
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию listview ownerdraw

Приветствую, ищу доходчивый пример по listview ownerdraw. Лучше на асм, но можно и на Си. Ни у кого не завалялся в закромах ?
mikado3333 вне форума Ответить с цитированием
Старый 01.04.2016, 12:57   #2
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Однако, Здравствуйте!
Виртуальный Listview отрисовка в drawitem.
Код:
.wmdrawitem:   ;{
    mov     eax,0
    mov     ebx,[lparam]
    cmp     [ebx + DRAWITEMSTRUCT.CtlType],ODT_LISTVIEW                                                             ;! Проверяем что сообщение от listview
    jnz     .finish 
    cmp     [ebx + DRAWITEMSTRUCT.itemAction],ODA_FOCUS                                                             ;! Узнаем трубуемую операцию рисования
    jz      .finish
 
    mov     esi,0
    
            Mz_SeacheHwndInMass [hwnd]
    mov     edi,dword[eax + 4]                                                                                      ;! edi адрес массива MASS содержащий текст
    
    mov     eax,[ebx + DRAWITEMSTRUCT.itemID]                                                                       ;! Получаем текст итема
    imul    eax,eax,8
    mov     [buffer],eax
    dec     [buffer]
 
    
.loop:                          
    mov     [rc.left],LVIR_BOUNDS
    mov     [rc.top],esi
    invoke  SendMessage,         [ebx + DRAWITEMSTRUCT.hwndItem],LVM_GETSUBITEMRECT,\                                ;! Получение rect сабитема                 
                                 [ebx + DRAWITEMSTRUCT.itemID],rc       
    inc     [buffer]                                                                                                 ;! Получаем текст сабитема
            MASS_LINK_STR edi,[buffer]                                                                              
    
    inc     [rc.bottom]                                                                                              ;! Рисуем сабитем
    dec     [rc.left]
    invoke  Rectangle,           [ebx + DRAWITEMSTRUCT.hDC],[rc.left],[rc.top],[rc.right],[rc.bottom]
    add     [rc.left],5
    sub     [rc.right],5
    invoke  DrawText,            [ebx + DRAWITEMSTRUCT.hDC],[edi + MASS.STR],-1,rc,0
    inc     esi
    cmp     esi,8
    jnz     .loop
    jmp     .finish
;}
Проблема при добавлении строк скролл прорисовывается темным цветом.

Второй вопрос:
Для устранения мерцания listView в инете рекомендуют использовать двойную буферизацию. В WM_DRAWITEM возможно ли ей воспользоваться или она только для WM_PAINT?
mikado3333 вне форума Ответить с цитированием
Старый 01.04.2016, 13:53   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Можно
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TListView OwnerDraw не рисуются SubItems JoLan Компоненты Delphi 10 13.02.2016 04:54
Как удалить строку из ListView (в режиме OwnerDraw) ? garuna Общие вопросы Delphi 20 29.12.2014 07:45
TMenuItem.ImageIndex и OwnerDraw kettanaito Общие вопросы Delphi 0 13.06.2012 12:56
OwnerDraw ListView with Checkboxes t2skler Общие вопросы C/C++ 0 05.06.2012 19:32
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04