| Можно ли по-своему отрисовывать строки ListView?
					16.10.2002
				 | Odi$$ey | 
			BS>Привет всем!
BS>Есть стандартный ListView со стилями LVS_EX_GRIDLINES и LVS_REPORT (эмуляция Grid-a). Хочется сделать "зебру" — чередующиеся белые и серые полосы. Или выделять некоторые строки иным цветом (красным, если это что-то критическое), в зависимости от значения строки.
BS>Можно ли это сделать средствами обычного ListView?
	
	
	BS>Есть стандартный ListView со стилями LVS_EX_GRIDLINES и LVS_REPORT (эмуляция Grid-a). Хочется сделать "зебру" — чередующиеся белые и серые полосы. Или выделять некоторые строки иным цветом (красным, если это что-то критическое), в зависимости от значения строки.
BS>Можно ли это сделать средствами обычного ListView?
#define CDDS_SUBITEMPREPAINT (CDDS_ITEM | CDDS_SUBITEM | CDDS_PREPAINT)
void CXxxxxxx::OnMyListCustomDraw( NMHDR * pNMHDR, LRESULT * pResult )
{
    NMLVCUSTOMDRAW * pLVCustomDraw = ( NMLVCUSTOMDRAW* ) pNMHDR;
    *pResult = CDRF_DODEFAULT;
    switch ( pLVCustomDraw->nmcd.dwDrawStage )
    {
        case CDDS_PREPAINT:
            // при начале прорисовки листа указываем, что нам нужны нотификации на прорисовку каждой строки
            *pResult |= CDRF_NOTIFYITEMDRAW ;
            break;
        case CDDS_ITEMPREPAINT:
            // если нужно красить строки целиком, то можно остановиться здесь
            // установить цвета текста и фона и выставить *pResult |= CDRF_NEWFONT;, НО, нам
            // item-ов маловато, хотим прорисовывать разным цветом subitem-ы, поэтому
            *pResult |= CDRF_NOTIFYSUBITEMDRAW;
            break;
        case CDDS_SUBITEMPREPAINT:
            // а вот и они
            switch ( pLVCustomDraw->iSubItem ) // каждую колоночку отдельно
            {
                case IDENT_COL: 
                    if ( чего-то там )
                    {
                        pLVCustomDraw->clrTextBk = GetSysColor( COLOR_WINDOW );
                        pLVCustomDraw->clrText = GetSysColor( COLOR_WINDOWTEXT );
                    }
                    break;
                case TIME_COL:
                    if ( чего-то там )
                    {
                        pLVCustomDraw->clrText = m_clrWarning;
                        pLVCustomDraw->clrTextBk = GetSysColor( COLOR_WINDOW );
                    }
                    else
                    {
                        pLVCustomDraw->clrText = m_clrNoWarning;
                        pLVCustomDraw->clrTextBk = GetSysColor( COLOR_WINDOW );
                    }
                    break;
                default:
                    pLVCustomDraw->clrTextBk = GetSysColor( COLOR_WINDOW );
                    pLVCustomDraw->clrText = GetSysColor( COLOR_WINDOWTEXT );
                    break;
            }
            *pResult |= CDRF_NEWFONT;
            break;
    }
}| 16.10.2002 1 комментарий | 

OE> {
подскажите как номер строки узнать, а не только саб-итема ?