Colores en CListCtrl

21/01/2005 - 19:24 por Alias | Informe spam
En un pequeñon programa que utiliza un CListCtrl para visualizar un listado
en el que puede haber líneas de texto de tres colores diferentes utilizo la
función OnCustomdrawList que en principio me funciona estupendamente pero,
cuando hago scroll o acciones que implican cambio de posición de los textos
en la pantalla los colores de las líneas se corrompen y da la impresión que
el color es inamovible. ¿Cómo puedo solucionarlo?

La función que utilizo:
void CVistocksView::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
// Take the default processing unless we set this to something else
below.
*pResult = CDRF_DODEFAULT;

// First thing - check the draw stage. If it's the control's prepaint
// stage, then tell Windows we want messages for every item.

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the prepaint stage for an item. Here's where we set the
// item's text color. Our return value will tell Windows to draw the
// item itself, but it will use the new color we set here.
// We'll cycle the colors through red, green, and light blue.

COLORREF clrText, clrTextBk;
int iIcon;

iIcon = m_pItemIconos->GetHead();
m_pItemIconos->RemoveHead();

if(iIcon == 0)
{
clrText = RGB(0, 0, 0);
clrTextBk = RGB(255, 255, 255);
}
else
{
clrText = RGB(255, 255, 255);
clrTextBk = RGB(255, 0, 0);
}

// Store the color back in the NMLVCUSTOMDRAW struct.
pLVCD->clrText = clrText;
pLVCD->clrTextBk = clrTextBk;

// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}
}

Preguntas similare

Leer las respuestas

#1 Julio
23/01/2005 - 10:56 | Informe spam
Hola, para hacer esto que intentas lo que yo hago es activar la
caracteristica "Owner Draw Fixed" y sobreescribir la funcion "DrawItem" del
CListCtrl.

Espero haberte sido de ayuda...
Saludos, Julio.


"Alias" escribió en el mensaje
news:zNbId.452750$
En un pequeñon programa que utiliza un CListCtrl para visualizar un


listado
en el que puede haber líneas de texto de tres colores diferentes utilizo


la
función OnCustomdrawList que en principio me funciona estupendamente pero,
cuando hago scroll o acciones que implican cambio de posición de los


textos
en la pantalla los colores de las líneas se corrompen y da la impresión


que
el color es inamovible. ¿Cómo puedo solucionarlo?


La función que utilizo:
void CVistocksView::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
// Take the default processing unless we set this to something else
below.
*pResult = CDRF_DODEFAULT;

// First thing - check the draw stage. If it's the control's prepaint
// stage, then tell Windows we want messages for every item.

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the prepaint stage for an item. Here's where we set the
// item's text color. Our return value will tell Windows to draw


the
// item itself, but it will use the new color we set here.
// We'll cycle the colors through red, green, and light blue.

COLORREF clrText, clrTextBk;
int iIcon;

iIcon = m_pItemIconos->GetHead();
m_pItemIconos->RemoveHead();

if(iIcon == 0)
{
clrText = RGB(0, 0, 0);
clrTextBk = RGB(255, 255, 255);
}
else
{
clrText = RGB(255, 255, 255);
clrTextBk = RGB(255, 0, 0);
}

// Store the color back in the NMLVCUSTOMDRAW struct.
pLVCD->clrText = clrText;
pLVCD->clrTextBk = clrTextBk;

// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}
}



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida