Farbformatierung in einer ListCtrl



  • Hallo,

    ich habe Einträge in einer List Control und möchte die einzelnen Zeilen in unterschiedlichen Farben darstellen. Ich kann zwar mit SetTextColor() eine Farbformatierung vornehmen, doch werden dann alle Einträge der Liste farblich geändert.

    Wie kann ich also eine Zeilenweise formatierung bewirken?



  • derBob schrieb:

    Wie kann ich also eine Zeilenweise formatierung bewirken?

    Gute Frage !!! 😃 😃 😃



  • Horst2 schrieb:

    Gute Frage !!! 😃 😃 😃

    Ich weiß - darum habe ich sie ja auch gestellt...



  • Du musst sie selbst Zeichnen. Suche dir bei Codeguru eine Klasse und verwende die.



  • Unix-Tom schrieb:

    Du musst sie selbst Zeichnen. Suche dir bei Codeguru eine Klasse und verwende die.

    Soll das etwa heissen, dass es keine Standard-Methoden gibt, um die Farben zeilenweise zu ändern?
    Sogar im WinEplorer gibt es doch diese Darstellung!



  • Wenn du wissen willst ob es solche Methoden in der Klasse gibt dann schaue in die MSDN. Ich habe keine gefunden



  • Wenn ich Dich richtig verstehe arbeitest Du mit dem Report-Style von CListCtrl?
    Dann machst Du es so:
    1. Leite Dir eine Klasse in von CListCtrl ab.
    2. Hol Dir die CustomDraw Nachricht mit dem Assi.
    3. Im CDDS_ITEMPREPAINT-Stage veränderst Du die Farben "reihenweise":

    void CMyListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
    {
    	NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
    	*pResult = CDRF_DODEFAULT;
    	switch (pLVCD->nmcd.dwDrawStage)
    		{
    		case CDDS_PREPAINT:
    			// Wir wollen eine ITEMPREPAINT Nachricht also:
    			*pResult = CDRF_NOTIFYITEMDRAW;
    			break;
    		case CDDS_ITEMPREPAINT | CDDS_ITEM:
    			{
    				if ((int)pLVCD->nmcd.dwItemSpec % 2 == 1)
    				{
    					pLVCD->clrText = RGB(0,0,0); // Unsere Schriftfarbe
    					pLVCD->clrTextBk = RGB(240,240,240); // Unsere Hintergrundfarbe
    				}
    				*pResult = CDRF_DODEFAULT;
    			break;
    			}
    		default:
    			*pResult = CDRF_DODEFAULT;
    			break;
    		}
    }
    

    Fertig!

    Gruß T. 😉



  • Theo schrieb:

    Wenn ich Dich richtig verstehe arbeitest Du mit dem Report-Style von CListCtrl?

    Ja, das hast du richtig erkannt.
    Danke für die Hilfe - werd ich gleich mal ausprobieren!

    MfG,
    Bob


Anmelden zum Antworten