Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.119.199] |
|
Сообщ.
#1
,
|
|
|
доброво времени суток.
Делаю, значит, собственную отрисовку ListView case WM_DRAWITEM: RECT rectlv,recti,rectt,rectt2,rectl; draw=LPDRAWITEMSTRUCT(lparam); switch(draw->itemAction) { case ODA_SELECT: case ODA_DRAWENTIRE: HDC dc; dc=draw->hDC; ListView_GetItemRect(listview,draw->itemID,&recti,LVIR_BOUNDS);//Получение rect итема rectt=recti;//рект текста GetClientRect(listview,&rectlv);//Получение rect всего listview ListView_GetSubItemRect(listview,draw->itemID,1, LVIR_BOUNDS,&rectl);//Получение ректа субитемов //размер ректа итема recti.left=0; recti.right=rectlv.right; HBRUSH brush,brush2; //цвета брашей при выделании if (draw->itemState & ODS_SELECTED) { brush=GetSysColorBrush(COLOR_HIGHLIGHT); brush2=GetSysColorBrush(COLOR_HIGHLIGHT); }else{ // и без выделения brush=CreateSolidBrush(RGB(255,255,255)); brush2=CreateSolidBrush(RGB(200,200,200)); } //рисуем итем FillRect(dc,&recti,brush); //Магия =) "Настройка" ректов текста rectt.left=35; rectt.top=rectt.top+12; rectt2=rectt;//рект текста 2 колонки rectt2.left=rectl.left+35; //Текст std::wstring text; wchar_t *gettext=new wchar_t[MAX_PATH]; ListView_GetItemText(listview,draw->itemID,0, gettext,MAX_PATH); text=gettext; //Рисуем текст первой колнки DrawText(dc,text.c_str(),text.length(), &rectt,0); //Рисуем субитем FillRect(dc,&rectl,brush2); //Получаем текст субитемов wchar_t *gettext=new wchar_t[MAX_PATH]; ListView_GetItemText(listview,draw->itemID,1, gettext,MAX_PATH); text=gettext; //Рисуем DrawText(dc,text.c_str(),text.length(), &rectt2,0); //Рисуем субитемы FillRect(dc,&rectlbk,brush); //Чистим память DeleteObject(brush); DeleteObject(brush2); } break; Ну вроде все рисуется нормально, КРОМЕ! пустово места. Ну всмысле вот 2 колнки и справа пустое место без них Вот это место заливается цветом но как то неправильно Я выделаю итем, все рисуется ровно до конца второй колонки резайзю окно или скроллю listview дорисовывается до конца выделяю другой итем - снова тоже самое. Итемы рисуются а этот остаток места неперерисовывается Ну вот собстно вопрос - как пофиксить? -------------------------------------------------- PS за качество кода просьба сильно не пиннать... |
Сообщ.
#2
,
|
|
|
Путь один использовать WM_ERASEBKGND.
Путь два LVM_SETBKCOLOR. Путь три LVM_SETBKIMAGE. |
Сообщ.
#3
,
|
|
|
Понятно...
А есть еще способы? Я так понимаю эта часть просто не перерисовывается при WM_DRAWITEM. |
Сообщ.
#4
,
|
|
|
Конечно же не перерисовывается.
|