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...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...