Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > ListView окраска текста и фона Item


Автор: ZC1989 29.2.2008, 15:48
у меня рисуеться тебличка...нужно что бы хотя бы одсна строчка была выделена уникальна... что бы можно было менять цвет текста и фона...а то я нашёл функции что бы меня только общий фон и общий цвет текста...как такое сделать?

Автор: ZC1989 29.2.2008, 17:24
нащёл тут на форуме функция которая длает в принцыпе то что нужно....засунул её в NOTIFY...там 3 параметра...1 - LPNMLVCUSTOMDRAW  2 - данные о таблице   3 - цвета каждай ячецки..  2 и 3 параметры забить лехко...а вот первый...там ваще ересь...можно как то это получить программно? ну там через функцию какую...потому что не всё параметры задавал у меня без изменений...чёрное с белым..как обычное...(((( smile 

Автор: Alca 29.2.2008, 17:35
Код

//---------------------------------------------------------------------------
void __fastcall TfrmMain::lvwReadInfoCustomDrawSubItem(TCustomListView *Sender, TListItem *Item, int SubItem, TCustomDrawState State, bool &DefaultDraw) {
    TListView *pLV = static_cast<TListView*>(Sender);
    ////DefaultDraw    = false;

    pLV->Canvas->Font->Color = clBlue;
    if (Item->Caption.SubString(0, 8) == "eToken #") {
        pLV->Canvas->Font->Color  = clRed;
        pLV->Canvas->Brush->Color = clYellow;
        pLV->Canvas->Font->Style  = TFontStyles() << fsBold;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lvwReadInfoCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw) {
    if (Item->Caption.SubString(0, 8) == "eToken #") {
        TListView *pLV = static_cast<TListView*>(Sender);
        ////DefaultDraw    = false;

        pLV->Canvas->Font->Color  = clRed;
        pLV->Canvas->Brush->Color = clYellow;
        pLV->Canvas->Font->Style  = TFontStyles() << fsBold;
    }
}
//---------------------------------------------------------------------------


Автор: ZC1989 29.2.2008, 20:36
Alca, прости, у меня Visual Studio....вообще половины переменных не определить...и от какого класса эти функции наследуються чтото то же смутно понятно))  можна как нибудь по другому это ? )))) smile 

Автор: Alca 2.3.2008, 15:59
При размещении списка элементов класса CListCtrl в окошке ,произошедшем от CListView, столкнулся с проблемой. 
Как можно изменить, например background, неактивных элементов списка? 

Напиши класс производный от CListCtrl и в нем наследую функцию DrawItem, она рисует элементы. 
Потом создай CListView на основе нового класса 

Смотри MSDN:
Platgform SDK/User Interface Services/Windows Common Controls/List View Controls/Overview of List View Controls/List View Colors ...
точнее NM_CUSTOMDRAW 
 
Так яиспользовал для Дерева, но суть таже
Код

BEGIN_MESSAGE_MAP(
....
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
void CColorView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) 
{
NMTVCUSTOMDRAW* pTVCustomDraw = (NMTVCUSTOMDRAW*)pNMHDR;

*pResult = CDRF_DODEFAULT;

switch(pTVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT: 
pTVCustomDraw->clrText = RGB(0, 0, 255 - (25 * pTVCustomDraw->iLevel));
break;
}
}
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)