Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

kann mir jemand sagen wie ich bei einem Listensteuerelement die Farbe einer einzelnen Zeile ändern kann? Sobald ich Farbangaben für den Hintergrund oder den Text mache, so wird die Farbe in allen Zeilen dargestellt. Naja auf jeden Fall wird die letzte Farbänderung auf alle Zeilen angewendet und macht damit die vorherigen Angaben damit immer zunichte.

SYS W2K

VC 6.0

MFC Anwendung

danke

Geschrieben

// Draw the background color

if( bHighlight )

{

pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));

pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));

pDC->FillRect(rcHighlight, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));

}

else

{

CRect rcClient, rcRow = rcItem;

GetClientRect(&rcClient);

rcRow.right = rcClient.right;

pDC->FillRect(rcRow, &CBrush(nItem%2 ? ::GetSysColor(COLOR_WINDOW) :

RGB(255,255,0)));

}

--> das so sollte funzen... musste in die DrawItem() - Methode packen

Geschrieben

Muß ich dazu mit dem pDC arbeiten oder geths auch anders ? Ich bearbeite das Listenelement in der Dialogklasse mit der ControlVariable und die Änderung der Farbe klappt ja auch, nur nicht in einer einzelnen Zeile ?

Aber trotzdem schon mal danke für den Hinweiß.

Geschrieben

Hallo,

ich ändere die Farbe auch in der Klasse unter DrawItem.

Um z.B. eine unterschiedliche Fareb in gerade und ungeraden Zeilen und eine extra Fareb in der gerade markierten Zeile einzustellen habe ich folgenden Code eingefügt:

if(lpDrawItemStruct->itemState&ODS_SELECTED)//Zeile ist ausgewählt

{

	// Selected

	if (lpDrawItemStruct->itemID&0x01 != 0) // ungerade Zeile

	{

		back_color =  RGB(200,0,200);

		for_color =  ::GetSysColor(COLOR_HIGHLIGHTTEXT);

		image_style = ILD_BLEND25;

	}

	else //gerade Zeile

	{

		back_color =  RGB(0,200,100);

		for_color =  RGB(0,0,5);

		image_style = ILD_BLEND25;

	}

}

else

{

	if (lpDrawItemStruct->itemID&0x01 != 0) // ungerade Zeile

	{

		back_color= RGB(0,128,128);

		for_color =  RGB(255,255,128);

		image_style = ILD_NORMAL;

	}

	else //gerade Zeile

	{

		back_color= RGB(128,0,128);

		for_color =  RGB(128,255,255);

		image_style = ILD_NORMAL;

	}

}


CBrush brush;


brush.CreateSolidBrush(back_color);


cdc->FillRect(item_rect,&brush);

cdc->SetBkColor(back_color);

cdc->SetTextColor(for_color);

Hilft Dir das weiter?

  • 2 Wochen später...
Geschrieben

Ich muß zugeben nicht so sehr, da habe ich noch ein paar Fragen an Dich.

An welcher Stelle rufst Du die DrawItem() auf ?

Bisher habe ich ausschließlich über die ControllVariable das Listenelement bediehnt, sprich gefüllt und ausgelesen. Ich denke mal, da Du auch mit cdc arbeitest ist dein Ansatz ein anderer. Wie ich die Textfarbe für alle ändere das weiß ich ja, mir fehlt die selektierung der einzelnen Zeile.

Ich vermute mal das das Steuerelement erst gefüllt werden muß bevor ich einzelne Zeilen wieder ändern kann.

Ich vermute weiterhin, das Du bevor Du die DrawItem() aufrufst eine bestimmte Zeile selektiert hast ?

Gruß Joerg

  • 1 Monat später...
Geschrieben

Jo, ich habe mir ne eigene Klasse von der CListCtrl abgeleitet und da die DrawItem Funktion überschrieben.

Mit dem Standard Controll gehts glaub ich net für jede Zeile, oder wenn weiss ich nicht wie :(

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...