<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Verständnissfrage zu WM_DRAWITEM]]></title><description><![CDATA[<p>Also ich erkläre mal was ich erreichen will und was ich schon ausprobiert habe. Das Ziel ist es die Selektionmark-Farben und Selektionmark-Textfarbe eines Listviews im Reportstyle zu ändern.<br />
Zuerst habe ich versucht das über NM_CUSTOMDRAW zu bewerkstelligen, das hat leider nicht funktioniert.<br />
Nun bin ich dran das über den Style LVS_OWNERDRAWFIXED und der Message WM_DRAWITEM zu bewerkstelligen. Da ich in der DRAWITEMSTRUCT nirgendwo einen Hinweis auf die Subitems gefunden habe, kann ich mir das nur so erklären, daß ich nun beim Erhalten der Message WM_DRAWITEM die komplette Zeile des Listviews mit meinem Texten, also auch die der Subitems und den dazugehörigen Icons füllen muss, ist diese Annahme richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209040/verständnissfrage-zu-wm_drawitem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 22:02:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209040.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Mar 2008 05:54:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 05:54:00 GMT]]></title><description><![CDATA[<p>Also ich erkläre mal was ich erreichen will und was ich schon ausprobiert habe. Das Ziel ist es die Selektionmark-Farben und Selektionmark-Textfarbe eines Listviews im Reportstyle zu ändern.<br />
Zuerst habe ich versucht das über NM_CUSTOMDRAW zu bewerkstelligen, das hat leider nicht funktioniert.<br />
Nun bin ich dran das über den Style LVS_OWNERDRAWFIXED und der Message WM_DRAWITEM zu bewerkstelligen. Da ich in der DRAWITEMSTRUCT nirgendwo einen Hinweis auf die Subitems gefunden habe, kann ich mir das nur so erklären, daß ich nun beim Erhalten der Message WM_DRAWITEM die komplette Zeile des Listviews mit meinem Texten, also auch die der Subitems und den dazugehörigen Icons füllen muss, ist diese Annahme richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480407</guid><dc:creator><![CDATA[winapi noooob]]></dc:creator><pubDate>Wed, 26 Mar 2008 05:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 10:27:14 GMT]]></title><description><![CDATA[<p>Bzgl. WM_DRAWITEM, Ja Du musst alles selber machen.</p>
<p>Und was ist Dein Problem mit NM_CUSTOMDRAW. Damit geht das doch auch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480497</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 26 Mar 2008 10:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 16:53:51 GMT]]></title><description><![CDATA[<p>Ok hier mal mein Quellcode für NM_CUSTOMDRAW:</p>
<pre><code class="language-cpp">LRESULT CALLBACK EH_LVCustomDraw(LPARAM lParam){

	LPNMLVCUSTOMDRAW		cd;

	cd = (LPNMLVCUSTOMDRAW)lParam;
	if(!(cd-&gt;nmcd.uItemState &amp; CDIS_FOCUS)){				//alle Items ohne Focus werden normal gezeichnet
		return CDRF_DODEFAULT;
	}
	switch(cd-&gt;nmcd.dwDrawStage){
		case CDDS_PREPAINT:
			return CDRF_NOTIFYITEMDRAW;
		case CDDS_ITEMPREPAINT:
			return CDRF_NOTIFYSUBITEMDRAW;
		case CDDS_SUBITEM | CDDS_ITEMPREPAINT:{
			switch(cd-&gt;iSubItem){
				case 0:{
					cd-&gt;clrText   = RGB(209, 209, 209);
					cd-&gt;clrTextBk =RGB(0, 128, 0);
					return CDRF_NEWFONT;
				}
				case 1:{
					cd-&gt;clrText   = RGB(209, 209, 209);
					cd-&gt;clrTextBk =RGB(0, 128, 0);
					return CDRF_NEWFONT;
				}
				case 2:{
					cd-&gt;clrText   = RGB(209, 209, 209);
					cd-&gt;clrTextBk =RGB(0, 128, 0);
					return CDRF_NEWFONT;
				}
				case 3:{
					cd-&gt;clrText   = RGB(209, 209, 209);
					cd-&gt;clrTextBk =RGB(0, 128, 0);
					return CDRF_NEWFONT;
				}
			}
		}
	}
	return CDRF_DODEFAULT;
}
</code></pre>
<p>und im Event Handler dieser Aufruf:</p>
<pre><code class="language-cpp">case NM_CUSTOMDRAW:
		return EH_LVCustomDraw(lParam);
</code></pre>
<p>Ich tendiere zwar dahingehend, daß ich die Message WM_DRAWITEM auswerten werde, aber auch wenn ich den Ansatz über NM_CUSTOMDRAW nicht verwende, wäre ich dir dankbar wenn du mir sagst wo mein Fehler liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480825</guid><dc:creator><![CDATA[winapi noooob]]></dc:creator><pubDate>Wed, 26 Mar 2008 16:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 17:31:11 GMT]]></title><description><![CDATA[<p>1. Wichtige Frage: Ist das eine DialogProc?<br />
Dann wäre ein SetWindowLong(...DWL_MSGRESULT...) nötig!<br />
2. IMHO wäre CDRF_DODEFAULT der richtige Returnwert!</p>
<p>Ansonsten:<br />
Das Beispiel ändert auch die Textfarbe (zwar in anderem Kontext), aber es ist ein funktionierender Code.</p>
<p><a href="http://blogs.msdn.com/oldnewthing/archive/2005/07/13/438381.aspx" rel="nofollow">http://blogs.msdn.com/oldnewthing/archive/2005/07/13/438381.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480849</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 26 Mar 2008 17:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 18:04:44 GMT]]></title><description><![CDATA[<p>Danke erstmal für die schnelle Antwort<br />
zu 1: nein das Fenster ist kein Dialog, es ist ein Child Fenster<br />
zu 2: wenn ich dich richtig verstanden habe soll ich CDRF_NEWFONT gegen CDRF_DODEFAULT austauschen? Gut hab ich gemacht leider mit dem gleichen Ergebniss, daß die Selektionmark nach wie vor in Systemfarben gezeichnet wird.</p>
<p>Also um sicher zu gehn, daß der Text und der Texthintegrund mit den von mir gewünschten Farben dargestellt wird habe ich einfach mal die Zeile geändert:</p>
<pre><code class="language-cpp">if(!(cd-&gt;nmcd.uItemState &amp; CDIS_FOCUS)){
</code></pre>
<p>in:</p>
<pre><code class="language-cpp">if((cd-&gt;nmcd.uItemState &amp; CDIS_FOCUS)){
</code></pre>
<p>wie man von dem Programm erwarten sollte wurden die nicht ausgewählten Items nun mit den modifizierten Farben dargestellt, dies geschiet sowohl mit dem von mir vorher geposteten Code, als auch mit den nach deinem Vorschlag modifizierten Code. Wo könnte der Fehler noch liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480860</guid><dc:creator><![CDATA[winapi noooob]]></dc:creator><pubDate>Wed, 26 Mar 2008 18:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 18:17:09 GMT]]></title><description><![CDATA[<p>Dir ist der Unterschied zwischen CDIS_FOCUS und CDIS_SELECTED klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480865</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 26 Mar 2008 18:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Wed, 26 Mar 2008 18:54:18 GMT]]></title><description><![CDATA[<p>Naja bei CDIS_FOCUS ist der Item Selected und hat den Keyboardfocus, bei CDIS_SELECTED kann er sich auch in einem inaktiven Fenster befinden, ist dies korrekt?</p>
<p>Ok testhalber änder ich den Code mal folgendermassen und enferne diese Zeilen:</p>
<pre><code class="language-cpp">if(!(cd-&gt;nmcd.uItemState &amp; CDIS_FOCUS)){
        return CDRF_DODEFAULT;
    }
</code></pre>
<p>dann sollte der Listvie ja egal was ausgewählt ist in jeder Zeile gleich aussehen, tut er aber nicht, die Zeile mit der Selectionmark hat wieder die Systemfarben, alle andern Zeilen liefern das gewünsche Ergebinss. Was soll ich da jetzt machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480895</guid><dc:creator><![CDATA[winapi noooob]]></dc:creator><pubDate>Wed, 26 Mar 2008 18:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnissfrage zu WM_DRAWITEM on Fri, 28 Mar 2008 06:18:14 GMT]]></title><description><![CDATA[<p>Ist schon ärgerlich herauszufinden, daß bei einem Listview Childfenster, das den Extended Style <strong>LVS_SHOWSELALWAYS</strong> erhalten hat für <strong>jedes</strong> Item das Flag CDIS_SELECTED gesetzt ist, wenn man NM_CUSTOMDRAW auswerten. Ich hab das unter Win98se und winxp ausprobiert. In der MSDN steht nix darüber, kann mir das jemand mal erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481822</guid><dc:creator><![CDATA[winapi noooob]]></dc:creator><pubDate>Fri, 28 Mar 2008 06:18:14 GMT</pubDate></item></channel></rss>