<?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[Drag&amp;amp;Drop in einem SysTreeView32]]></title><description><![CDATA[<p>Grüße!</p>
<p>Leider komme ich mit Drag&amp;Drop in einem SysTreeView32 nicht weiter. Genauergesagt ist bis auf das Verschieben von Branches alles fertig.<br />
Einzelne Childs ohne weitere Childs zu verschieben geht schon. Allerdings macht mir das Rekursive Probleme...</p>
<p>Das habe ich bis jetzt, gibt ne Endlosschleife beim verschieben eines Nodes mit &gt;= 1 Child.</p>
<pre><code class="language-cpp">HWND treeView ...

// Drag-Node durchlaufen und nach Drop-Node einfügen
void AddTreeNode(HTREEITEM next, HTREEITEM root = 0)
{
	TVITEM item = { };

	item.hItem = next;
	item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIF_STATE;
	char buf[512] = { };
	item.pszText = buf;
	item.cchTextMax = 512;

	TreeView_GetItem(treeView, &amp;item);

	TVINSERTSTRUCT insertStruct = { };

	if(root)
		insertStruct.hParent = root;
	else
	{
		insertStruct.hInsertAfter = 0; // ?
		insertStruct.hParent = TreeView_GetParent(treeView, next);
	}

	insertStruct.item = item;

	TreeView_InsertItem(treeView, &amp;insertStruct);

	next = TreeView_GetChild(treeView, next);

	while(next)
	{
		AddTreeNode(next);
		next = TreeView_GetNextSibling(treeView, next);
	}
}

// Drop:
AddTreeNode(dragItem, dropItem);
TreeView_DeleteItem(treeView, dragItem);
</code></pre>
<p>Hab sowas noch nie gemacht und hab einfach keine Ahnung warum das nicht klappt. Ist auch doof dokumentiert, gibt TreeView_GetNextSibling() nun Null zurück, wenn kein weiteres Element mehr in der Ebene ist, oder nur beim Root...</p>
<p>Toll wäre ein funktionierendes Beispiel.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241226/drag-amp-drop-in-einem-systreeview32</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 01:04:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241226.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 May 2009 21:26:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Drag&amp;amp;Drop in einem SysTreeView32 on Sun, 17 May 2009 21:26:41 GMT]]></title><description><![CDATA[<p>Grüße!</p>
<p>Leider komme ich mit Drag&amp;Drop in einem SysTreeView32 nicht weiter. Genauergesagt ist bis auf das Verschieben von Branches alles fertig.<br />
Einzelne Childs ohne weitere Childs zu verschieben geht schon. Allerdings macht mir das Rekursive Probleme...</p>
<p>Das habe ich bis jetzt, gibt ne Endlosschleife beim verschieben eines Nodes mit &gt;= 1 Child.</p>
<pre><code class="language-cpp">HWND treeView ...

// Drag-Node durchlaufen und nach Drop-Node einfügen
void AddTreeNode(HTREEITEM next, HTREEITEM root = 0)
{
	TVITEM item = { };

	item.hItem = next;
	item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIF_STATE;
	char buf[512] = { };
	item.pszText = buf;
	item.cchTextMax = 512;

	TreeView_GetItem(treeView, &amp;item);

	TVINSERTSTRUCT insertStruct = { };

	if(root)
		insertStruct.hParent = root;
	else
	{
		insertStruct.hInsertAfter = 0; // ?
		insertStruct.hParent = TreeView_GetParent(treeView, next);
	}

	insertStruct.item = item;

	TreeView_InsertItem(treeView, &amp;insertStruct);

	next = TreeView_GetChild(treeView, next);

	while(next)
	{
		AddTreeNode(next);
		next = TreeView_GetNextSibling(treeView, next);
	}
}

// Drop:
AddTreeNode(dragItem, dropItem);
TreeView_DeleteItem(treeView, dragItem);
</code></pre>
<p>Hab sowas noch nie gemacht und hab einfach keine Ahnung warum das nicht klappt. Ist auch doof dokumentiert, gibt TreeView_GetNextSibling() nun Null zurück, wenn kein weiteres Element mehr in der Ebene ist, oder nur beim Root...</p>
<p>Toll wäre ein funktionierendes Beispiel.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711942</guid><dc:creator><![CDATA[Zerkleinerer]]></dc:creator><pubDate>Sun, 17 May 2009 21:26:41 GMT</pubDate></item><item><title><![CDATA[Reply to Drag&amp;amp;Drop in einem SysTreeView32 on Mon, 18 May 2009 02:12:07 GMT]]></title><description><![CDATA[<p>Hab ein tutorial gefunden! Jetzt sieht es schon sehr gut aus, allerdings kann man noch parents an indirekte childs hängen.</p>
<p>Wie könnte ich das überprüfen?<br />
Und ist der Code so OK?</p>
<p>Danke jedenfalls!</p>
<pre><code class="language-cpp">void AddTreeNode(HTREEITEM branch, HTREEITEM newParent)
{
	HWND treeView = GetDlgItem(tabPageHandles[0], IDC_TREE1);

	TVINSERTSTRUCT insertStruct = { };

	insertStruct.item.hItem = branch;
	insertStruct.item.mask = TVIF_TEXT;
	char buf[512] = { };
	insertStruct.item.pszText = buf;
	insertStruct.item.cchTextMax = 512;

	TreeView_GetItem(treeView, &amp;insertStruct.item);

	insertStruct.hParent = newParent;
	insertStruct.hInsertAfter = TVI_LAST;

	HTREEITEM hNewItem = TreeView_InsertItem(treeView, &amp;insertStruct);
	HTREEITEM hChild = TreeView_GetChild(treeView, branch);

	while(hChild)
	{
		AddTreeNode(hChild, hNewItem);
		hChild = TreeView_GetNextSibling(treeView, hChild);
	}
}

// Aufruf (OnDrop):
HTREEITEM dropItem = TreeView_GetDropHilight(treeView);

if(TreeView_GetParent(treeView, dropItem) == m_dragItem)
    abort = true;

if(dropItem == m_dragItem)
    abort = true;

...

AddTreeNode(m_dragItem, dropItem);
TreeView_DeleteItem(treeView, m_dragItem);

...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1711971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711971</guid><dc:creator><![CDATA[Zerkleinerer]]></dc:creator><pubDate>Mon, 18 May 2009 02:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to Drag&amp;amp;Drop in einem SysTreeView32 on Mon, 18 May 2009 11:43:42 GMT]]></title><description><![CDATA[<p>Habe es nun mit einer FindTreeEntry() Funktion ganz gut hinbekommen:<br />
Danke trotzdem. Thema so ziemlich erledigt (Sieht jemand noch ein Problem mit dem Code? Gibt es eine unbehandelte Situation?).<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712150</guid><dc:creator><![CDATA[Zerkleinerer]]></dc:creator><pubDate>Mon, 18 May 2009 11:43:42 GMT</pubDate></item></channel></rss>