<?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[Immernoch CListView und das Sortieren der Items!!!]]></title><description><![CDATA[<p>Hi Leute!<br />
Ich wieder!<br />
Also nochmal! Ich habe eine CObArray Liste! Aus dieser werden Daten ausgelesen und in eine CListCtrl Liste geladen! Ganz Toll! Jetzt habe ich es geschaft die Liste Sortieren zu lassen (Zugegeben nicht selbs geschrieben!)! Nun hatte ich das Problem das ich nach dem Sortieren nicht die zuordnung von Items und Listenelementen hinbekommen habe! Da wurde mir der Tip gegeben den Index der linearen Liste in der lParam Variable von dem Item zu speichern! Gute Idee direkt umgesetzt! Nu das nächste Problem:</p>
<pre><code class="language-cpp">BOOL CMyListCtrl::SortItems(int nColumn, int nOrder)
{
	 // if nColumn &lt; 0 the resort with the last used column and order
	 // nOrder &gt; 0 =&gt; assending, nOrder &lt; 0 =&gt; desending, nOrder = 0 =&gt; toggle

	 if (nColumn &gt;= 0)
	 {
		  m_nSortColumn = nColumn;
		  m_pSortOrders[m_nSortColumn] = (nOrder != 0)
				  ? nOrder 
				  : -m_pSortOrders[m_nSortColumn];
	 }
	 if (m_nSortColumn &lt; 0) return FALSE;

	 // Reset the param entry to point to the index
	 LV_ITEM lvi;
	 lvi.mask = LVIF_PARAM;
	 lvi.iSubItem = 0;
	 for (lvi.iItem = 0; GetItem(&amp;lvi); lvi.iItem++)
	 {
		  lvi.lParam = lvi.iItem;
		  SetItem(&amp;lvi);
	 }
	 // Set the parameters for the compare function
	 long lParams[3] = {(long) this,
		  (long) m_nSortColumn,
		  (long) m_pSortOrders[m_nSortColumn]};
	 // Sort the items
	 return CListCtrl::SortItems(&amp;CompareFunc, (LPARAM) lParams);
}
</code></pre>
<p>Man beachte das die sortierfunktion in der schleife lParam verändert! Toll! Warum diese Funktion das macht weiss ich nicht!<br />
Hier noch die CALLBACK funktion von SortItems:</p>
<pre><code class="language-cpp">int CALLBACK CMyListCtrl::CompareFunc(LPARAM nItem1, LPARAM nItem2, LPARAM lParams)
{ 
	 CMyListCtrl* pList = ((CMyListCtrl **) lParams)[0];
	 int nSubItem = ((int *) lParams)[1];
	 int nOrder = ((int *) lParams)[2];
	 int nCompare = lstrcmp(pList-&gt;GetItemText(nItem1, nSubItem),
			  pList-&gt;GetItemText(nItem2, nSubItem));
	 return nOrder * nCompare;
}
</code></pre>
<p>Ich versteh nicht wozu die funktion diese Variabel braucht!!!!!<br />
Bin langsam verzweifelt!<br />
Ich danke euch schon mal für euere Hilfe!</p>
<p>Mfg Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/65579/immernoch-clistview-und-das-sortieren-der-items</link><generator>RSS for Node</generator><lastBuildDate>Fri, 05 Jun 2026 13:17:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/65579.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Feb 2004 01:02:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Immernoch CListView und das Sortieren der Items!!! on Fri, 20 Feb 2004 01:02:20 GMT]]></title><description><![CDATA[<p>Hi Leute!<br />
Ich wieder!<br />
Also nochmal! Ich habe eine CObArray Liste! Aus dieser werden Daten ausgelesen und in eine CListCtrl Liste geladen! Ganz Toll! Jetzt habe ich es geschaft die Liste Sortieren zu lassen (Zugegeben nicht selbs geschrieben!)! Nun hatte ich das Problem das ich nach dem Sortieren nicht die zuordnung von Items und Listenelementen hinbekommen habe! Da wurde mir der Tip gegeben den Index der linearen Liste in der lParam Variable von dem Item zu speichern! Gute Idee direkt umgesetzt! Nu das nächste Problem:</p>
<pre><code class="language-cpp">BOOL CMyListCtrl::SortItems(int nColumn, int nOrder)
{
	 // if nColumn &lt; 0 the resort with the last used column and order
	 // nOrder &gt; 0 =&gt; assending, nOrder &lt; 0 =&gt; desending, nOrder = 0 =&gt; toggle

	 if (nColumn &gt;= 0)
	 {
		  m_nSortColumn = nColumn;
		  m_pSortOrders[m_nSortColumn] = (nOrder != 0)
				  ? nOrder 
				  : -m_pSortOrders[m_nSortColumn];
	 }
	 if (m_nSortColumn &lt; 0) return FALSE;

	 // Reset the param entry to point to the index
	 LV_ITEM lvi;
	 lvi.mask = LVIF_PARAM;
	 lvi.iSubItem = 0;
	 for (lvi.iItem = 0; GetItem(&amp;lvi); lvi.iItem++)
	 {
		  lvi.lParam = lvi.iItem;
		  SetItem(&amp;lvi);
	 }
	 // Set the parameters for the compare function
	 long lParams[3] = {(long) this,
		  (long) m_nSortColumn,
		  (long) m_pSortOrders[m_nSortColumn]};
	 // Sort the items
	 return CListCtrl::SortItems(&amp;CompareFunc, (LPARAM) lParams);
}
</code></pre>
<p>Man beachte das die sortierfunktion in der schleife lParam verändert! Toll! Warum diese Funktion das macht weiss ich nicht!<br />
Hier noch die CALLBACK funktion von SortItems:</p>
<pre><code class="language-cpp">int CALLBACK CMyListCtrl::CompareFunc(LPARAM nItem1, LPARAM nItem2, LPARAM lParams)
{ 
	 CMyListCtrl* pList = ((CMyListCtrl **) lParams)[0];
	 int nSubItem = ((int *) lParams)[1];
	 int nOrder = ((int *) lParams)[2];
	 int nCompare = lstrcmp(pList-&gt;GetItemText(nItem1, nSubItem),
			  pList-&gt;GetItemText(nItem2, nSubItem));
	 return nOrder * nCompare;
}
</code></pre>
<p>Ich versteh nicht wozu die funktion diese Variabel braucht!!!!!<br />
Bin langsam verzweifelt!<br />
Ich danke euch schon mal für euere Hilfe!</p>
<p>Mfg Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/463729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/463729</guid><dc:creator><![CDATA[Dragon2004]]></dc:creator><pubDate>Fri, 20 Feb 2004 01:02:20 GMT</pubDate></item></channel></rss>