<?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[Treeview problem (leere Items)]]></title><description><![CDATA[<p>hi</p>
<p>ich habe eine kleine Klasse zur Benutzung von TreeViews geschrieben.<br />
Nur hab ich ein Problem:</p>
<p>und zwar, wenn ich einen Item einfüge und irgenwann mal wieder entferne - dann<br />
sind alle darauffolgende neu hinzugefügte Einträge leer. Man kann sie aber anwählen.<br />
Sie sind einfach leer:</p>
<p>hier ist der fehlerhafte Code</p>
<pre><code class="language-cpp">HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test&quot;,NULL));
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(hTest);
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test&quot;,NULL);
</code></pre>
<p>---<br />
und hier ist der Code der funktioniert:</p>
<pre><code class="language-cpp">HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test1&quot;,NULL));
&gt;&gt;&gt;einziger Unterschied : 
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test2&quot;,NULL);
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(hTest);
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_FIRST,&quot;test3&quot;,NULL);
</code></pre>
<p>Wie man sieht funkz es nur, wenn zwischen dem ersten AddItem und dem DeleteItem ein weiteres AddItem drinsteht. Änderungen an TVI_FIRST oder TVI_ROOT bringen nix.</p>
<p>ich hab zuerst TEXT_CALLBACK verwendet, aber das funkz genausowenig. Habe die ganze WM_NOTIFY Routine ausgeschaltet!</p>
<p>Es funkz übrigens auch dann nicht, wenn man zwischen AddItem und DeleteItem viel Zeit vergehen lässt. Also die Routinen per Button aktiviert:</p>
<pre><code class="language-cpp">if (wParam == IDC_BUTTON1)
{
HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test1&quot;,NULL));
//TreeView_SelectItem(DebugDialogHandler-&gt;m_Tree-&gt;m_hTreeView,hTest);
}
else
if (wParam == IDC_BUTTON2)
{
HTREEITEM h = DebugDialogHandler-&gt;m_Tree-&gt;GetSelectedItem();
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(h);
}
</code></pre>
<p>Es funkz nur wenn man zweimal den BUTTON1 drückt.</p>
<p>Also hat jemand Ahnung warum es nicht funkz?</p>
<p>(nutze MS DEV 7)<br />
THX</p>
<p>Hier ist der Quelltext der Toolsfunktionen.</p>
<p>*********************</p>
<pre><code class="language-cpp">HTREEITEM VTreeView::AddItem(HTREEITEM hParent,HTREEITEM hInsertAfter, VString sText, void* lpData)
{
TVINSERTSTRUCT istruct;
memset(&amp;istruct,0,sizeof(istruct));

//TVITEM &amp;iItem = istruct.item;
//memset(&amp;iItem,0,sizeof(iItem));
//iItem.mask = TVIF_STATE | TVIF_TEXT | TVIF_PARAM;
istruct.item.mask = TVIF_TEXT | TVIF_PARAM;
istruct.item.state = 0;

LPTreeItem Data = new TreeItem;
Data-&gt;pParent = this;
Data-&gt;sText = sText;
Data-&gt;pData = lpData;

istruct.item.lParam = (LPARAM)Data;
//iItem.lParam = 0;

//istruct.item.pszText = LPSTR_TEXTCALLBACK;
istruct.item.pszText = &quot;123&quot;;
//(LPTSTR)sText.c_str();
/*iItem.pszText = new char[_VLen(sText)+1];
memset(iItem.pszText,0,_VLen(sText)+1);

strncpy(iItem.pszText,sText,_VLen(sText));*/
//iItem.cchTextMax = 50000 ;
//iItem.cchTextMax = 3;

istruct.hParent = hParent;
istruct.hInsertAfter = hInsertAfter;
//istruct.item = iItem;

HTREEITEM res = TreeView_InsertItem(m_hTreeView,&amp;istruct);
int err = GetLastError();
return res;
}

***************
bool VTreeView::DeleteItem(HTREEITEM hitem)
{
if (hitem != NULL)
{
bool b = (bool)TreeView_DeleteItem(this-&gt;m_hTreeView,hitem);
int i = GetLastError();
return b;
}
else
return false;
}
</code></pre>
<p>Crosspost:<br />
<a href="http://spotlight.de/nzforen/cpp/m/cpp-1105819960-28443.html" rel="nofollow">http://spotlight.de/nzforen/cpp/m/cpp-1105819960-28443.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/98013/treeview-problem-leere-items</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 19:17:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/98013.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Jan 2005 20:27:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Treeview problem (leere Items) on Sat, 15 Jan 2005 20:39:31 GMT]]></title><description><![CDATA[<p>hi</p>
<p>ich habe eine kleine Klasse zur Benutzung von TreeViews geschrieben.<br />
Nur hab ich ein Problem:</p>
<p>und zwar, wenn ich einen Item einfüge und irgenwann mal wieder entferne - dann<br />
sind alle darauffolgende neu hinzugefügte Einträge leer. Man kann sie aber anwählen.<br />
Sie sind einfach leer:</p>
<p>hier ist der fehlerhafte Code</p>
<pre><code class="language-cpp">HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test&quot;,NULL));
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(hTest);
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test&quot;,NULL);
</code></pre>
<p>---<br />
und hier ist der Code der funktioniert:</p>
<pre><code class="language-cpp">HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test1&quot;,NULL));
&gt;&gt;&gt;einziger Unterschied : 
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test2&quot;,NULL);
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(hTest);
DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_FIRST,&quot;test3&quot;,NULL);
</code></pre>
<p>Wie man sieht funkz es nur, wenn zwischen dem ersten AddItem und dem DeleteItem ein weiteres AddItem drinsteht. Änderungen an TVI_FIRST oder TVI_ROOT bringen nix.</p>
<p>ich hab zuerst TEXT_CALLBACK verwendet, aber das funkz genausowenig. Habe die ganze WM_NOTIFY Routine ausgeschaltet!</p>
<p>Es funkz übrigens auch dann nicht, wenn man zwischen AddItem und DeleteItem viel Zeit vergehen lässt. Also die Routinen per Button aktiviert:</p>
<pre><code class="language-cpp">if (wParam == IDC_BUTTON1)
{
HTREEITEM hTest = (DebugDialogHandler-&gt;m_Tree-&gt;AddItem(NULL,TVI_ROOT,&quot;test1&quot;,NULL));
//TreeView_SelectItem(DebugDialogHandler-&gt;m_Tree-&gt;m_hTreeView,hTest);
}
else
if (wParam == IDC_BUTTON2)
{
HTREEITEM h = DebugDialogHandler-&gt;m_Tree-&gt;GetSelectedItem();
DebugDialogHandler-&gt;m_Tree-&gt;DeleteItem(h);
}
</code></pre>
<p>Es funkz nur wenn man zweimal den BUTTON1 drückt.</p>
<p>Also hat jemand Ahnung warum es nicht funkz?</p>
<p>(nutze MS DEV 7)<br />
THX</p>
<p>Hier ist der Quelltext der Toolsfunktionen.</p>
<p>*********************</p>
<pre><code class="language-cpp">HTREEITEM VTreeView::AddItem(HTREEITEM hParent,HTREEITEM hInsertAfter, VString sText, void* lpData)
{
TVINSERTSTRUCT istruct;
memset(&amp;istruct,0,sizeof(istruct));

//TVITEM &amp;iItem = istruct.item;
//memset(&amp;iItem,0,sizeof(iItem));
//iItem.mask = TVIF_STATE | TVIF_TEXT | TVIF_PARAM;
istruct.item.mask = TVIF_TEXT | TVIF_PARAM;
istruct.item.state = 0;

LPTreeItem Data = new TreeItem;
Data-&gt;pParent = this;
Data-&gt;sText = sText;
Data-&gt;pData = lpData;

istruct.item.lParam = (LPARAM)Data;
//iItem.lParam = 0;

//istruct.item.pszText = LPSTR_TEXTCALLBACK;
istruct.item.pszText = &quot;123&quot;;
//(LPTSTR)sText.c_str();
/*iItem.pszText = new char[_VLen(sText)+1];
memset(iItem.pszText,0,_VLen(sText)+1);

strncpy(iItem.pszText,sText,_VLen(sText));*/
//iItem.cchTextMax = 50000 ;
//iItem.cchTextMax = 3;

istruct.hParent = hParent;
istruct.hInsertAfter = hInsertAfter;
//istruct.item = iItem;

HTREEITEM res = TreeView_InsertItem(m_hTreeView,&amp;istruct);
int err = GetLastError();
return res;
}

***************
bool VTreeView::DeleteItem(HTREEITEM hitem)
{
if (hitem != NULL)
{
bool b = (bool)TreeView_DeleteItem(this-&gt;m_hTreeView,hitem);
int i = GetLastError();
return b;
}
else
return false;
}
</code></pre>
<p>Crosspost:<br />
<a href="http://spotlight.de/nzforen/cpp/m/cpp-1105819960-28443.html" rel="nofollow">http://spotlight.de/nzforen/cpp/m/cpp-1105819960-28443.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/697500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/697500</guid><dc:creator><![CDATA[Dezipaitor]]></dc:creator><pubDate>Sat, 15 Jan 2005 20:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Treeview problem (leere Items) on Sat, 15 Jan 2005 23:04:58 GMT]]></title><description><![CDATA[<p>Tja wer hätt's gedacht!</p>
<p>Da hab ich doch soviele Infos gegeben, aber die Windows Styles hab ich glatt vergessen.</p>
<p>Das Problem liegt darin, dass der Style<br />
TVS_NOSCROLL<br />
gesetzt wurde.</p>
<p>In MSDEV ist &quot;Bildlauf&quot; auf false gesetzt.</p>
<p>Wenn das Flag nicht vorhanden ist, also der Bildlauf eingeschaltet ist,<br />
dann funkz es!!</p>
<p>Der Witz ist: Es funkz auch mit dem Flag!</p>
<p>Wenn man das Flag entfernt und dann wieder setzt, funkz es danach wunderbar (zumindest bei mir)</p>
<pre><code class="language-cpp">/*
doHardFix 
entfernt das TVS_NOSCROLL Flag 
ansonsten wird es einfach entfernt und wieder gesetzt.
*/
void VTreeView::SolveDeleteLastItemProblem(bool doHardFix)
{
	if (doHardFix)
	{
		LONG oldstyle = GetWindowLong(m_hTreeView, GWL_STYLE);

		if (oldstyle &amp; TVS_NOSCROLL)
			oldstyle ^= TVS_NOSCROLL; //XOR removes bit (10.0000.0000.0000) 
		::SetWindowLong(m_hTreeView, GWL_STYLE, oldstyle);
	}
	else
	{
		//this works fine for me
		SetTVProperty(TVS_NOSCROLL );
		SetTVPropertyOff(TVS_NOSCROLL);
	}
	//retrieves the invisible items
	RECT rect;
	GetClientRect(m_hTreeView,&amp;rect);
	InvalidateRect(m_hTreeView,&amp;rect,TRUE);

/*	CONTROL         &quot;&quot;,IDC_TREE1,&quot;SysTreeView32&quot;,TVS_NOTOOLTIPS | 
                    TVS_NOSCROLL | WS_GROUP | WS_TABSTOP,7,22,233,103,

					TVS_NOSCROLL  prevents item to be shown

					*/
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/697644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/697644</guid><dc:creator><![CDATA[Dezipaitor]]></dc:creator><pubDate>Sat, 15 Jan 2005 23:04:58 GMT</pubDate></item><item><title><![CDATA[Reply to Treeview problem (leere Items) on Sat, 15 Jan 2005 23:10:35 GMT]]></title><description><![CDATA[<p>Ist das nicht was für The Daily WTF? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a href="http://www.thedailywtf.com" rel="nofollow">http://www.thedailywtf.com</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/697650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/697650</guid><dc:creator><![CDATA[the daily...]]></dc:creator><pubDate>Sat, 15 Jan 2005 23:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to Treeview problem (leere Items) on Sun, 16 Jan 2005 00:17:03 GMT]]></title><description><![CDATA[<p>the daily... schrieb:</p>
<blockquote>
<p>Ist das nicht was für The Daily WTF? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a href="http://www.thedailywtf.com" rel="nofollow">http://www.thedailywtf.com</a></p>
</blockquote>
<p>na, wenn du das für so lustig hälst - dann könntest du das dort ja mal posten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich fands leider net so komisch, weil ich 4h für das Problem benötigt habe, wobei es sich dabei nur um ein Schönheitsfehler handelt.<br />
Es war schon Zufall, dass ich den Fehler überhaupt fand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/697691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/697691</guid><dc:creator><![CDATA[Dezipaitor]]></dc:creator><pubDate>Sun, 16 Jan 2005 00:17:03 GMT</pubDate></item></channel></rss>