List Control - kann man das Highlighting ausschalten?



  • Hallo,

    ich habe eine Liste, in der ich die Selektion der aktuellen Zeile nicht anzeigen möchte. Kennt jemand eine Möglichkeit, wie soetwas umzusetzten ist?

    Vielen Dank für eure Hilfe



  • Hmm, disabeln? Musst Du denn trotzdem darauf noch Aktionen ausführen können?



  • Wenn alles scheitern sollte könntest du dir noch eine eigene OwnerDraw Liste erstellen...



  • Ja, die Kenntnis der Auswahl soll schon vorhanden sein. Es würde auch reichen, wenn die Selection beim Verlassen der Liste verschwindet, nur ist mir nicht bekannt, wie ich soetwas umsetzten kann (wann wird die Liste verlassen ...).



  • OwnerDraw wäre nicht verkehrt. Hier ist halt auch das Problem, dass ich nicht weiss, wie ich der Kiste sagen soll, dass die Hintergrundfarbe der Selektion der des Listenhintergrundes entspricht!



  • Ich hab hier leider nur eine WinAPI Code-Schnipsel für das Draw-Event des Items.:

    // Check to see if this item is selected
    	if (lpdis->itemState & ODS_SELECTED)
    	{
    		// Set the text background and foreground colors
    		SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
    		SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT));
    		FillRect(lpdis->hDC,&lpdis->rcItem,GetSysColorBrush(COLOR_HIGHLIGHT));
    	}
    	else
    	{
    		// Set the text background and foreground colors to the standard window
    		// colors
    
    		SetTextColor(lpdis->hDC, GetSysColor(COLOR_WINDOWTEXT));
    		SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW));
    		FillRect(lpdis->hDC,&lpdis->rcItem, GetSysColorBrush(COLOR_WINDOW));
    	}
    

    Wie Du erkennen kannst wird hier zwischen selektiert und nicht selektiert unterschieden. Und genau das müsstest Du vereinheitlichen.

    Falls noch was fehlt, frag einfach nochmal.



  • Hallo,

    vielen Dank für deinen Tip, es schaut auf jeden Fall vielversprechend aus. Welche initialisierungen sind hierfür denn erforderlich?



  • Also beim erstellen der Listbox muss der Style LBS_OWNERDRAWFIXED verwendet werden.
    Dadurch wird das Zeichnen der Items durch die Funktion DrawItem durchgeführt. In dieser Funktion benutzt Du den oberen Code um den Hintergrund zu malen. Allerdings musst Du das gesamte Item malen (Mein Code füllt ja nur den Hintergrund). Dazu schaust Du Dir am besten mal bei Codeproject oder etwas Ähnlichem die ownerdraw Listen an. Da gibt es genügend Beispiele und Du musst das Fahrrad ja nicht zweimal erfinden.



  • Vielen Dank! 👍


Anmelden zum Antworten