Всем привет. Мне необходимо разным итемам в списке присваивать свои цвета. Делаю так : Код (Text): DlgProc proc uses ebx hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM . . .elseif eax==WM_NOTIFY mov ebx,lParam assume ebx:ptr NMHDR mov eax,[ebx].hwndFrom .if eax==hlist mov eax,[ebx.NMHDR].code .if eax==NM_CUSTOMDRAW mov ebx,lParam assume ebx: ptr NMLVCUSTOMDRAW .if ([ebx].nmcd.dwDrawStage==CDDS_PREPAINT) invoke SetWindowLong,hWin, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW mov eax,CDRF_NOTIFYITEMDRAW ret .elseif ([ebx].nmcd.dwDrawStage==CDDS_ITEMPREPAINT) mov eax, color_message_bg mov [ebx].clrTextBk, eax mov eax, color_message mov [ebx].clrText, eax invoke SetWindowLong,hWin, DWL_MSGRESULT, CDRF_NEWFONT mov eax,CDRF_NEWFONT ret .else .endif assume ebx:nothing .endif .endif; .if [edi].code==LVN_COLUMNCLICK assume ebx:nothing . . Красим : Код (Text): mov color_message, красный mov color_message_bg, зеленый invoke SendMessage,hlist, LVM_INSERTITEM,0, addr lvi inc lvi.iItem mov color_message, желтый mov color_message_bg, серый invoke SendMessage,hlist, LVM_INSERTITEM,0, addr lvi . . Покрасили, но вот засада ... 1. кликаем на итеме и он окрашивается в последние цвета... 2. обновляем окно - все итемы окрашиваются в последние цвета ... неужто параметры каждого итема нужно запоминать , чтоб потом возвращать? Или как можно запретить контролу перерисовывать итемы ... юзать LVS_OWNERDRAWFIXED ?
Естественно. На языках высокого уровня можно было создать свой класс на основе listview и переписать функцию рисования. Но как это сделать на ассемблере - думаю что непросто.
Вроде понял - надо при мессаге рисования обрабатывать данный итем и его окрашивать в нужный цвет, не будет ли тормозить прога ... С уважением ...
leeloo Я думаю не будет. Рисование все равно делается, а изменение цвета по идее - это запись нескольких байт.
Сделал. Тема закрыта. Краску каждой строки заношу в память. Код (Text): mov eax, lvi.iItem shl eax, 3 add eax, pMemory add eax, 20*1024*1024 mov dword ptr [eax], 00000000h add eax, 4 mov dword ptr [eax], 00808080h invoke SendMessage,hlist, LVM_INSERTITEM,0, addr lvi Все на автомате Код (Text): mov edx, [ebx].nmcd.dwItemSpec shl edx, 3 add edx, pMemory add edx, 20*1024*1024 mov eax, dword ptr[edx] mov [ebx].clrText, eax add edx, 4 mov eax, dword ptr[edx] mov [ebx].clrTextBk, eax invoke SetWindowLong,hWin, DWL_MSGRESULT, CDRF_NEWFONT mov eax,CDRF_NEWFONT