<?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[Ttems in Treeview sortieren, Teillösung gefunden, wie gehts weiter?]]></title><description><![CDATA[<p>Ok, mein Ziel ist es eine Funktion zu schreiben die, die Items eines Treeviewzweiges sortiert. Es werden neben dem Handel des Items, dessen subitems sortiert werden sollen 2 weitere Parameter übergeben, der eine legt die Sortierordnung fest, der andere gibt an ob noch zwischen Groß und Kleinschreibung unterschieden werden soll. Ich hab da mal eine Funktion geschriebn die beding funktioniert, und zwar für den Fall, daß keines der Childitems des Zweiges ebenfalls wieder Subitems enthält. Ich würde die Funktion nun gerne so realisieren, daß sie die Childitems die ebenfalls Childitems enthalten an den Anfang sortiert werden und dann erst sortiert die Childitems die keine Childitems enthlten. Bekanntes Beispiel ist der Explorer, hier werden die Ordner an den Anfanggestellt, dannach folgen die Dateien. So soll mein Treeview auch aussehen. Also hier mal mein Code und wie ich einen Zweig sortiere der nur Childitems ohne eigene Childitems enthält:</p>
<pre><code class="language-cpp">boolean TV_SortSubitems(HWND hWnd, HTREEITEM pItem, boolean absteigend, boolean ignorecase){

	TVITEM			tv_Item1, tv_Item2;
	HTREEITEM		cItem1, cItem2, sItem;
	int			anzahl = 0, i, j, result, lParam;
	char			text1[512], text2[512];

	cItem1 = TreeView_GetChild(hWnd, pItem);
	sItem = TreeView_GetSelection(hWnd);
	lParam = TV_GetItemLPARAM(hWnd, sItem);
	if(!cItem1){
		return FALSE;
	}
	anzahl++;
	while(cItem1 = TreeView_GetNextSibling(hWnd, cItem1)){
		anzahl++;
	}
	for(i = 0; i &lt; anzahl - 1; i++){
		cItem1 = TreeView_GetChild(hWnd, pItem);
		for(j = 0; j &lt; anzahl - 1; j++){
			cItem2 = TreeView_GetNextSibling(hWnd, cItem1);
			memset(&amp;tv_Item1, 0, sizeof(tv_Item1));
			tv_Item1.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
			tv_Item1.hItem = cItem1;
			tv_Item1.stateMask = TVIS_STATEIMAGEMASK;
			tv_Item1.pszText = text1;
			tv_Item1.cchTextMax = sizeof(text1);
			TreeView_GetItem(hWnd, &amp;tv_Item1);
			memset(&amp;tv_Item2, 0, sizeof(tv_Item2));
			tv_Item2.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
			tv_Item2.hItem = cItem2;
			tv_Item2.stateMask = TVIS_STATEIMAGEMASK;
			tv_Item2.pszText = text2;
			tv_Item2.cchTextMax = sizeof(text2);
			TreeView_GetItem(hWnd, &amp;tv_Item2);
			if(ignorecase == TRUE){
				result = _stricmp(text1, text2);
			}else{
				result = strcmp(text1, text2);
			}
			if(((absteigend == TRUE) &amp;&amp;(result &gt; 0)) || ((absteigend == FALSE) &amp;&amp;(result &lt; 0))){
				tv_Item1.hItem = cItem2;
				tv_Item2.hItem = cItem1;
				TreeView_SetItem(hWnd, &amp;tv_Item1);
				TreeView_SetItem(hWnd, &amp;tv_Item2);
			}
			cItem1 = cItem2;
		}
	}
	sItem = TV_FindItemLPARAM(hWnd, lParam);
	TreeView_SelectItem(hWnd, sItem);
	return TRUE;
}
</code></pre>
<p>Leider hab ich noch nicht herausgefunden wie man zwei Items gegeneinader tauscht, wenn ein Item weitere Childitems enthält. Ich hoffe ich habe mich einigermassen verständlich ausgedrückt und jemand kann mir hier weiterhelfen. Ein guter Denkansatz wäre schon mal was.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229032/ttems-in-treeview-sortieren-teillösung-gefunden-wie-gehts-weiter</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 07:05:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229032.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Dec 2008 14:11:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ttems in Treeview sortieren, Teillösung gefunden, wie gehts weiter? on Sat, 06 Dec 2008 14:11:46 GMT]]></title><description><![CDATA[<p>Ok, mein Ziel ist es eine Funktion zu schreiben die, die Items eines Treeviewzweiges sortiert. Es werden neben dem Handel des Items, dessen subitems sortiert werden sollen 2 weitere Parameter übergeben, der eine legt die Sortierordnung fest, der andere gibt an ob noch zwischen Groß und Kleinschreibung unterschieden werden soll. Ich hab da mal eine Funktion geschriebn die beding funktioniert, und zwar für den Fall, daß keines der Childitems des Zweiges ebenfalls wieder Subitems enthält. Ich würde die Funktion nun gerne so realisieren, daß sie die Childitems die ebenfalls Childitems enthalten an den Anfang sortiert werden und dann erst sortiert die Childitems die keine Childitems enthlten. Bekanntes Beispiel ist der Explorer, hier werden die Ordner an den Anfanggestellt, dannach folgen die Dateien. So soll mein Treeview auch aussehen. Also hier mal mein Code und wie ich einen Zweig sortiere der nur Childitems ohne eigene Childitems enthält:</p>
<pre><code class="language-cpp">boolean TV_SortSubitems(HWND hWnd, HTREEITEM pItem, boolean absteigend, boolean ignorecase){

	TVITEM			tv_Item1, tv_Item2;
	HTREEITEM		cItem1, cItem2, sItem;
	int			anzahl = 0, i, j, result, lParam;
	char			text1[512], text2[512];

	cItem1 = TreeView_GetChild(hWnd, pItem);
	sItem = TreeView_GetSelection(hWnd);
	lParam = TV_GetItemLPARAM(hWnd, sItem);
	if(!cItem1){
		return FALSE;
	}
	anzahl++;
	while(cItem1 = TreeView_GetNextSibling(hWnd, cItem1)){
		anzahl++;
	}
	for(i = 0; i &lt; anzahl - 1; i++){
		cItem1 = TreeView_GetChild(hWnd, pItem);
		for(j = 0; j &lt; anzahl - 1; j++){
			cItem2 = TreeView_GetNextSibling(hWnd, cItem1);
			memset(&amp;tv_Item1, 0, sizeof(tv_Item1));
			tv_Item1.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
			tv_Item1.hItem = cItem1;
			tv_Item1.stateMask = TVIS_STATEIMAGEMASK;
			tv_Item1.pszText = text1;
			tv_Item1.cchTextMax = sizeof(text1);
			TreeView_GetItem(hWnd, &amp;tv_Item1);
			memset(&amp;tv_Item2, 0, sizeof(tv_Item2));
			tv_Item2.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
			tv_Item2.hItem = cItem2;
			tv_Item2.stateMask = TVIS_STATEIMAGEMASK;
			tv_Item2.pszText = text2;
			tv_Item2.cchTextMax = sizeof(text2);
			TreeView_GetItem(hWnd, &amp;tv_Item2);
			if(ignorecase == TRUE){
				result = _stricmp(text1, text2);
			}else{
				result = strcmp(text1, text2);
			}
			if(((absteigend == TRUE) &amp;&amp;(result &gt; 0)) || ((absteigend == FALSE) &amp;&amp;(result &lt; 0))){
				tv_Item1.hItem = cItem2;
				tv_Item2.hItem = cItem1;
				TreeView_SetItem(hWnd, &amp;tv_Item1);
				TreeView_SetItem(hWnd, &amp;tv_Item2);
			}
			cItem1 = cItem2;
		}
	}
	sItem = TV_FindItemLPARAM(hWnd, lParam);
	TreeView_SelectItem(hWnd, sItem);
	return TRUE;
}
</code></pre>
<p>Leider hab ich noch nicht herausgefunden wie man zwei Items gegeneinader tauscht, wenn ein Item weitere Childitems enthält. Ich hoffe ich habe mich einigermassen verständlich ausgedrückt und jemand kann mir hier weiterhelfen. Ein guter Denkansatz wäre schon mal was.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626165</guid><dc:creator><![CDATA[Rüüdiger]]></dc:creator><pubDate>Sat, 06 Dec 2008 14:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to Ttems in Treeview sortieren, Teillösung gefunden, wie gehts weiter? on Sat, 06 Dec 2008 18:49:30 GMT]]></title><description><![CDATA[<p>Warum nimmst Du nicht <a href="http://msdn.microsoft.com/en-us/library/bb773782.aspx" rel="nofollow">TVM_SORTCHILDREN</a>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626243</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Sat, 06 Dec 2008 18:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ttems in Treeview sortieren, Teillösung gefunden, wie gehts weiter? on Sun, 07 Dec 2008 17:25:24 GMT]]></title><description><![CDATA[<p>sri schrieb:</p>
<blockquote>
<p>Warum nimmst Du nicht <a href="http://msdn.microsoft.com/en-us/library/bb773782.aspx" rel="nofollow">TVM_SORTCHILDREN</a>?</p>
</blockquote>
<p>Das funktioniert nicht so wie ich es gerne hätte. Die Funktion TVM_SORTCHILDRENCB macht aber genau das was ich brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626583</guid><dc:creator><![CDATA[Rüüdiger]]></dc:creator><pubDate>Sun, 07 Dec 2008 17:25:24 GMT</pubDate></item></channel></rss>