schorschi Geschrieben 3. August 2006 Geschrieben 3. August 2006 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 Zitieren
FallenHammer Geschrieben 3. August 2006 Geschrieben 3. August 2006 // 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 Zitieren
schorschi Geschrieben 6. August 2006 Autor Geschrieben 6. August 2006 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ß. Zitieren
SunnyBunny Geschrieben 9. August 2006 Geschrieben 9. August 2006 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? Zitieren
schorschi Geschrieben 21. August 2006 Autor Geschrieben 21. August 2006 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 Zitieren
SunnyBunny Geschrieben 27. September 2006 Geschrieben 27. September 2006 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 Zitieren
Empfohlene Beiträge
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.