<?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[CTreeCtrl Bug?]]></title><description><![CDATA[<p>Hi!!</p>
<p>Ich habe ein CTreeCtrl, wo ich häufiger die Daten ändere. Dabei lösche ich bei jeder Aktualisierung die Elemente per:</p>
<pre><code class="language-cpp">m_tree.DeleteAllItems();
</code></pre>
<p>und füge danach neue ein per:</p>
<pre><code class="language-cpp">for(int i=0; i&lt;anz; i++)
{
        m_tree.InsertItem(&quot;String&quot;, TVI_ROOT, TVI_ROOT);
}
</code></pre>
<p>Aber: Es werden keine Elemente angezeigt!! Wenn ich davor das DeleteAllItems weglasse, werden die Elemente angezeigt - nur dann verlängert sich die Liste natürlich bei jeder Aktualisierung, da die veraltenen Elemente nicht gelöscht werden.</p>
<p>Kann es angehen, dass DeleteAllItems irgendwie das Ctrl komplett deinitialisiert oder ähnliches??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/50986/ctreectrl-bug</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 09:57:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/50986.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Oct 2003 09:58:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CTreeCtrl Bug? on Mon, 06 Oct 2003 09:58:16 GMT]]></title><description><![CDATA[<p>Hi!!</p>
<p>Ich habe ein CTreeCtrl, wo ich häufiger die Daten ändere. Dabei lösche ich bei jeder Aktualisierung die Elemente per:</p>
<pre><code class="language-cpp">m_tree.DeleteAllItems();
</code></pre>
<p>und füge danach neue ein per:</p>
<pre><code class="language-cpp">for(int i=0; i&lt;anz; i++)
{
        m_tree.InsertItem(&quot;String&quot;, TVI_ROOT, TVI_ROOT);
}
</code></pre>
<p>Aber: Es werden keine Elemente angezeigt!! Wenn ich davor das DeleteAllItems weglasse, werden die Elemente angezeigt - nur dann verlängert sich die Liste natürlich bei jeder Aktualisierung, da die veraltenen Elemente nicht gelöscht werden.</p>
<p>Kann es angehen, dass DeleteAllItems irgendwie das Ctrl komplett deinitialisiert oder ähnliches??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/366611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/366611</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Mon, 06 Oct 2003 09:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to CTreeCtrl Bug? on Mon, 06 Oct 2003 10:15:23 GMT]]></title><description><![CDATA[<p>m_tree.InsertItem(&quot;String&quot;, TVI_ROOT, TVI_LAST);</p>
<p>der letzte parameter ist die Einfügeposition (TVI_LAST = als letzten eintrag unter dem angegebenen parent)<br />
TVI_ROOT ist dafür nicht gültig, da der ja nur &quot;virtuell&quot; die (nicht sichtbare) Wurzel des trees beschreibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/366623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/366623</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 06 Oct 2003 10:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to CTreeCtrl Bug? on Mon, 06 Oct 2003 10:35:31 GMT]]></title><description><![CDATA[<p>Hier ist ne Lösung:</p>
<p><a href="http://p2p.wrox.com/archive/visual_c_plus_plus/2002-07/23.asp" rel="nofollow">http://p2p.wrox.com/archive/visual_c_plus_plus/2002-07/23.asp</a></p>
<p>Die funktioniert auch!</p>
<p>Das darf sich doch Bug nennen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/366640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/366640</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Mon, 06 Oct 2003 10:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to CTreeCtrl Bug? on Mon, 06 Oct 2003 15:23:00 GMT]]></title><description><![CDATA[<p>a) TVI_ROOT als letzter Parameter ist in jedem Fall falsch, liegt also nicht unbedingt am SetRedraw (geht's denn mit TVI_LAST statt dem zweiten TVI_ROOT ?)</p>
<p>b) Diese Bug ist mir bisher noch nicht untergekommen, konnte auch nirgendwo was finden (welche comctl32 Version(en) etc.), auch nicht das &quot;originale&quot; Problem auf dem Wrox-Messageboard. Konservativ würde ich da den Fehler erstmal bei mir (bzw. in diesem Faslle dir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) suchen.</p>
<p>Die Common Controls, speziell ListView und TreeView, haben relativ häufig ein Problem mit WM_SETREDRAW, so daß ich davon die Finger lassen würde (sicherer und &quot;schnell genug&quot; ist es, alle Items programmatisch zu collapsen, und die root items nacheinander zu löschen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/366907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/366907</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 06 Oct 2003 15:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to CTreeCtrl Bug? on Mon, 06 Oct 2003 22:04:07 GMT]]></title><description><![CDATA[<p>hier bin ich wieder! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>ich verwende jetzt folgenden code:</p>
<pre><code class="language-cpp">void ClistctrlDlg::RefreshListe(void)
{
	if(m_tree.m_hWnd)
	{
		HTREEITEM hCurrent = m_tree.GetNextItem(TVI_ROOT, TVGN_NEXT);

		while (hCurrent != NULL)
		{
			// Get the text for the item. Notice we use TVIF_TEXT because
			// we want to retrieve only the text, but also specify TVIF_HANDLE
			// because we're getting the item by its handle.
			TVITEM item;
			TCHAR szText[1024];
			item.hItem = hCurrent;
			item.mask = TVIF_TEXT | TVIF_HANDLE;
			item.pszText = szText;
			item.cchTextMax = 1024;

			BOOL bWorked = m_tree.GetItem(&amp;item);

			// Try to get the next item
			hCurrent = m_tree.GetNextItem(hCurrent, TVGN_NEXT);

			m_tree.DeleteItem(item.hItem);
		}

		for(int i=0; i&lt;m_liste.GetSize(); i++)
			m_tree.InsertItem(m_liste[i]);
	}
}
</code></pre>
<p>der debugger hält allerdings mit einer fehlermeldung, wo das erste mal GetNextItem ausgeführt wird.</p>
<p>Den Code habe ich fast 1 zu 1 aus der MSDN (CTreeCtrl::DeleteItem), da ich meinem eigenem Code, der das selbe tat nicht traute. Wie sich jetzt zeigt, wohl zu unrecht, da der MSDN eigene Code auch Fehler erzeugt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hier die Debugger Meldung:<br />
Eine Ausnahme (erste Chance) bei 0x780d0790 in listctrl.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xffff0004.<br />
Unbehandelte Ausnahme bei 0x780d0790 in listctrl.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xffff0004.</p>
<p>Hier hab ich nochmal ein Beispiel Projekt, dass nichts anderes tut, als den Fehler zu erzeugen!</p>
<p><a href="http://www.fheinemann.de/Downloads/listctrl.zip" rel="nofollow">http://www.fheinemann.de/Downloads/listctrl.zip</a> (Visual <a href="http://C++.Net" rel="nofollow">C++.Net</a>)</p>
<p>Übrigens: Zusammenhänge zu dem anderen Posting, dass ich in den letzten Tagen gemacht habe sind nicht zufällig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>**<br />
EDIT: Der Fehler wird noch lustiger, wenn man in der Funktion statt der Lösch-Schleife</p>
<pre><code class="language-cpp">m_tree.DeleteAllItems();

for(int i=0; i&lt;m_liste.GetSize(); i++)
	m_tree.InsertItem(m_liste[i]);
</code></pre>
<p>setzt!** Dann zeigt er nämlich keine Daten mehr an!!!</p>
<p>Außer, wenn man die oben beschriebene Lösung nutzt:</p>
<pre><code class="language-cpp">m_tree.SetRedraw(FALSE);
m_tree.DeleteAllItems();

for(int i=0; i&lt;m_liste.GetSize(); i++)
{
	CString a = m_liste[i];
	m_tree.InsertItem(a);
}
m_tree.SetRedraw(TRUE);
</code></pre>
<p>Ich hab langsam das Gefühl ich bin zu blöde für die Welt - oder der VS <a href="http://C++.NET" rel="nofollow">C++.NET</a> Compiler hat einen sehr großen Bug <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> (auch, wenn ich das nicht wirklich glaube)</p>
<p>Ich nutze übrigens nicht die neue VS <a href="http://C++.NET" rel="nofollow">C++.NET</a> 2003 Version sondern noch die &quot;alte&quot; .NET Version.</p>
<p>Und der Fehler tritt sowohl in meiner Firma auf als auch bei mir zu Hause auf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/367173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/367173</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Mon, 06 Oct 2003 22:04:07 GMT</pubDate></item></channel></rss>