ListBox FocusRect-Farbe ändern
-
Hallo!
Ich möchte gerne die Hintergrundfarbe des ausgewählten ListBox-Items ändern. Standardmäßig sind die ausgewählten Elemente z.B. grau hinterlegt.
Ich habe inzwischen herausgefunden, dass ich wohl ein Owner-Drawn Steuerelement erstellen und die DrawItem-Funktion überschreiben muss.
Nur habe ich weder eine Ahnung wie ich für ein Steuerelement wähle, dass es "owner-drawn" ist (ListBox.DrawMode scheint es nicht zu geben, was schon mal dem Beispiel* in der Knowlege-Base widerspricht), noch wüsste ich an welcher Stelle die DrawItem-Funktion zu überschreiben ist.
Das Einzige was mir hier sinnvoll erscheint ist einen Eventhanlder für das DrawItem-Ereignis hinzuzufügen - nur auch das passt nicht so ganz zu obigem Beispiel...Wär schön wenn mir da jemand mal einen Stoß in die richtige Richtung geben könnte...
Gruß,
Till
http://msdn2.microsoft.com/de-de/library/system.windows.forms.listbox.drawitem(VS.80).aspx
-
1. Der Stil Ownerdraw wird im Ressourcen-Editor vergeben als Eigenschaft der ListBox. Bitte verwende Ownerdraw Variable (Fixed geht in der MFC aus gewissen Gründen nicht).
2. Musst Du eine eigene Klasse erstellen und diese von ClistBox ableitenund dann DrawItem überschreiben.
3. Du musst Deine ListBox subclassen in DoDataExchange oder OnInitDialog.PS: Evtl. ist ein CListCtrl mit Customdraw einfacher zu bedienen.
http://www.codeguru.com/Cpp/controls/listview/customdrawing/article.php/c4195
http://www.codeguru.com/cpp/controls/listview/customdrawing/article.php/c4199
-
Hey, der Artikel zum CustomDraw ist ja klasse. Allerdings finde ich da keine Möglichkeit das Rechteck des ausgewählten Eintrags umzufärben.
Oder kann ich in BkColorForSubItem() überprüfen, ob es sich hier um das ausgewählte Item handelt und dann den Hintergrund ändern? Irgendwie muss ich ja vorher die Methode die normalerweise dafür zuständig umgehen...Zu dem anderen Hinweis:
3. Du musst Deine ListBox subclassen in DoDataExchange oder OnInitDialog.
Wie geht das?

-
-Till- schrieb:
3. Du musst Deine ListBox subclassen in DoDataExchange oder OnInitDialog.
Wie geht das?

Lies bitte ein Buch über die Grundlagen der MFC...
-
Martin Richter schrieb:
Lies bitte ein Buch über die Grundlagen der MFC...
Woher wusste ich nur, dass so ein Kommentar kommt

Ich habe hier sogar zwei Bücher als PDF (VC++.NET Das Buch & VC++.NET in 21 Tagen), in denen nicht einmal das Wort "subclass" vorkommt. Ganz so sehr Grundlage ist es also auch wieder nicht. Ich stelle solche Anfängerfragen ja auch nicht gern.
-
Wie wird denn der Vorgang genannt in dem man SubClassDlgItem aufruft?
Was sind das für MFC Bücher, die das nicht erklären?
Wie wird erklärt was DDX_Control ausführt?
Wie werden denn eigene Klassen von Standard Controls abgeleitet?
-
-Till- schrieb:
Ich habe hier sogar zwei Bücher als PDF (VC++.NET Das Buch & VC++.NET in 21 Tagen), in denen nicht einmal das Wort "subclass" vorkommt.
Ich kenne diese Bücher nicht, aber wahrscheinlich kommt da - da es ja um VC++.NET geht - noch nicht einmal das Wort "MFC" vor. :p
Vielleicht hilft Dir ja http://www.codeproject.com/miscctrl/subclassdemo.asp weiter. Oder Du fragst Google mal nach "mfc subclass". Du glaubst gar nicht, was dieser Typ alles darüber weiss
-
jencas schrieb:

Die Bücher beschäftigen sich insbesondere mit MFC (da sie ja für Visual-Studio-Einsteiger geschrieben sind). Subclassing kommt trotzdem nicht vor. Auch der Herr Google war nicht so hilfreich wie ich das sonst kenne... so einen schönen Artikel wie den oben hab ich nämlich nicht gefunden
