<?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[Listenelemente unter Listview farbig gestallten]]></title><description><![CDATA[<p>ich habe eine Liste mit CreateWindowEx erstellt und möchte nun einzelne Listenelemente farbig markieren. ich hab mir dieses <a href="http://www.codeproject.com/listctrl/listview.asp" rel="nofollow">beispiel von Code-Project</a> mal näher zu gemühte geführt. Leider haut das so bei mir nicht hin.</p>
<p>Ich subclasse die Callback prozedur die mir die die NM_CUSTOMDRAW nachricht abfängt. Leider wird mir die NM_CUSTOMDRAW Nachricht nur einmal abgearbeitet. und zwar nur wenn Header der Liste gesetzt werden. In dem Beispiel jedoch wird pro element die NM_CUSTOMDRAW angesprochen.<br />
jedoch andere Nachrichten werden korrekt in der Callback verarbeitet(siehe WM_MOUSEMOVE).</p>
<p>so starte ich die Subclass Callback</p>
<pre><code>m_ListCtrlProc = (WNDPROC)SetWindowLongPtr(hWndList, GWLP_WNDPROC, (LONG_PTR)ListCtrlProc);
</code></pre>
<pre><code>LRESULT CALLBACK ListCtrlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    // zunaechst die originale WNDPROC aufrufen
    LRESULT lResult = CallWindowProc(m_ListCtrlProc, hWnd, uMsg, wParam, lParam);

    switch(uMsg)
    {
		case WM_MOUSEMOVE:
			{
				//Hier arbeiete die Nachricht korreckt
			}
		break;

		case WM_NOTIFY:
			{
				NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)((LPNMHDR)lParam);

				switch(pNMListView-&gt;hdr.code)
				{
					case NM_CUSTOMDRAW:
						{
						    LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;

							switch(lplvcd-&gt;nmcd.dwDrawStage)
							{
								case CDDS_PREPAINT : //Before the paint cycle begins
									{
										//request notifications for individual listview items
										//return CDRF_NOTIFYITEMDRAW;
									}
								break;

								case CDDS_ITEMPREPAINT: //Before an item is drawn
									{
										//return CDRF_NOTIFYSUBITEMDRAW;
									}
								break;

								case CDDS_SUBITEM | CDDS_ITEMPREPAINT: //Before a subitem is drawn
									{
										switch(lplvcd-&gt;iSubItem)
										{

										}

									}
								break;
							}
						return CDRF_DODEFAULT;
						}
					break;
				}
			}
		break;
    }

  return(lResult);
}
</code></pre>
<p>weis jemand was ich verkehrt mach, oder weis jemand ein besseres beispiel??<br />
bin für jeden denkanstoß dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195409/listenelemente-unter-listview-farbig-gestallten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 00:58:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195409.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Oct 2007 11:46:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Listenelemente unter Listview farbig gestallten on Wed, 17 Oct 2007 11:46:20 GMT]]></title><description><![CDATA[<p>ich habe eine Liste mit CreateWindowEx erstellt und möchte nun einzelne Listenelemente farbig markieren. ich hab mir dieses <a href="http://www.codeproject.com/listctrl/listview.asp" rel="nofollow">beispiel von Code-Project</a> mal näher zu gemühte geführt. Leider haut das so bei mir nicht hin.</p>
<p>Ich subclasse die Callback prozedur die mir die die NM_CUSTOMDRAW nachricht abfängt. Leider wird mir die NM_CUSTOMDRAW Nachricht nur einmal abgearbeitet. und zwar nur wenn Header der Liste gesetzt werden. In dem Beispiel jedoch wird pro element die NM_CUSTOMDRAW angesprochen.<br />
jedoch andere Nachrichten werden korrekt in der Callback verarbeitet(siehe WM_MOUSEMOVE).</p>
<p>so starte ich die Subclass Callback</p>
<pre><code>m_ListCtrlProc = (WNDPROC)SetWindowLongPtr(hWndList, GWLP_WNDPROC, (LONG_PTR)ListCtrlProc);
</code></pre>
<pre><code>LRESULT CALLBACK ListCtrlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    // zunaechst die originale WNDPROC aufrufen
    LRESULT lResult = CallWindowProc(m_ListCtrlProc, hWnd, uMsg, wParam, lParam);

    switch(uMsg)
    {
		case WM_MOUSEMOVE:
			{
				//Hier arbeiete die Nachricht korreckt
			}
		break;

		case WM_NOTIFY:
			{
				NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)((LPNMHDR)lParam);

				switch(pNMListView-&gt;hdr.code)
				{
					case NM_CUSTOMDRAW:
						{
						    LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;

							switch(lplvcd-&gt;nmcd.dwDrawStage)
							{
								case CDDS_PREPAINT : //Before the paint cycle begins
									{
										//request notifications for individual listview items
										//return CDRF_NOTIFYITEMDRAW;
									}
								break;

								case CDDS_ITEMPREPAINT: //Before an item is drawn
									{
										//return CDRF_NOTIFYSUBITEMDRAW;
									}
								break;

								case CDDS_SUBITEM | CDDS_ITEMPREPAINT: //Before a subitem is drawn
									{
										switch(lplvcd-&gt;iSubItem)
										{

										}

									}
								break;
							}
						return CDRF_DODEFAULT;
						}
					break;
				}
			}
		break;
    }

  return(lResult);
}
</code></pre>
<p>weis jemand was ich verkehrt mach, oder weis jemand ein besseres beispiel??<br />
bin für jeden denkanstoß dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387107</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Wed, 17 Oct 2007 11:46:20 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente unter Listview farbig gestallten on Wed, 17 Oct 2007 15:01:23 GMT]]></title><description><![CDATA[<p>HILFE,<br />
ich hab jetzt nochmal von vorne begonnen. ich frage die NM_CUSTOMDRAW nachricht in der callback procedur des Dialoges ab. aber egal wie ich es anstelle, (ob ich die NM_CUSTOMDRAW nachricht so abfrage <a href="http://www.codeproject.com/listctrl/listview.asp" rel="nofollow">wie in dem beispiel von Code-Project</a> LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam bzw. mit switch(((LPNMHDR)lParam)-&gt;code)) es wird NM_CUSTOMDRAW nur einmal aufgerufen.</p>
<p>weis da jemand rat, warum das bei mir so passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387287</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Wed, 17 Oct 2007 15:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente unter Listview farbig gestallten on Wed, 17 Oct 2007 17:34:40 GMT]]></title><description><![CDATA[<p>Du darfst nicht CDRF_DODEFAULT returnieren.<br />
In diesem Fall macht den Rest das List View und NM_CUSTOMDRAW wird nie wieder ausgeführt.<br />
Du musst einen anderen Dir entsprechenden Code returnieren z.B. CDRF_NOTIFYPOSTERASE.</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/bb774865.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/bb774865.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387368</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 17 Oct 2007 17:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente unter Listview farbig gestallten on Thu, 18 Oct 2007 12:25:30 GMT]]></title><description><![CDATA[<p>danke für die hilfe lansam versteh ich was da passiert. mitlerweile wird auch NM_CUSTOMDRAW für jedes subitem angesprochen.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387852</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Thu, 18 Oct 2007 12:25:30 GMT</pubDate></item></channel></rss>