<?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[Problem mit Tree-View Control&#x2F;Klassenattribut]]></title><description><![CDATA[<p>Ich habe derzeit ein ganz merkwürdiges Problem, das wahrscheinlich gleichermaßen einfach zu lösen ist. Ich komme allerdings nicht drauf.</p>
<p>Ich habe eine Klasse TreeView, die die Einträge eine Tree-View Control in meinem Dialog verwaltet. Diese Klasse hat in der Definition das Attribut:</p>
<pre><code class="language-cpp">HTREEITEM entities;
</code></pre>
<p>Im Konstruktor werden dann einige Daten ausgelesen und die Message TVM_INSERTITEM an die Control abgeschickt. Die gibt ja als Rückgabewert den Handle zu dem Item des Tree-Views zurück, also mache ich folgendes:</p>
<pre><code class="language-cpp">entities = (HTREEITEM)SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_INSERTITEM, 0, (LPARAM)&amp;tree_node);
</code></pre>
<p>Überprüfe ich den Wert von entities, dann komme ich auf nicht Null. Wenn ich innerhalb des KOnstruktors damit weiterarbeite, klappt auch alles wunderbar.</p>
<p>Ich habe jetzt aber eine weitere Methode, die jeweils ein neues Element unter diesem Element entities einfügen soll. Mir ist aber aufgefallen, dass das nicht mehr geht, und zwar weil entities innerhalb dieser Methode anscheinend NULL ist. Dabei müsste das Attribut, aus dem Konstruktor gespeichert, doch mit der anderen Methode wieder abrufbar sein, oder?</p>
<p>Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177185/problem-mit-tree-view-control-klassenattribut</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 06:19:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177185.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Mar 2007 20:01:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Wed, 28 Mar 2007 20:01:55 GMT]]></title><description><![CDATA[<p>Ich habe derzeit ein ganz merkwürdiges Problem, das wahrscheinlich gleichermaßen einfach zu lösen ist. Ich komme allerdings nicht drauf.</p>
<p>Ich habe eine Klasse TreeView, die die Einträge eine Tree-View Control in meinem Dialog verwaltet. Diese Klasse hat in der Definition das Attribut:</p>
<pre><code class="language-cpp">HTREEITEM entities;
</code></pre>
<p>Im Konstruktor werden dann einige Daten ausgelesen und die Message TVM_INSERTITEM an die Control abgeschickt. Die gibt ja als Rückgabewert den Handle zu dem Item des Tree-Views zurück, also mache ich folgendes:</p>
<pre><code class="language-cpp">entities = (HTREEITEM)SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_INSERTITEM, 0, (LPARAM)&amp;tree_node);
</code></pre>
<p>Überprüfe ich den Wert von entities, dann komme ich auf nicht Null. Wenn ich innerhalb des KOnstruktors damit weiterarbeite, klappt auch alles wunderbar.</p>
<p>Ich habe jetzt aber eine weitere Methode, die jeweils ein neues Element unter diesem Element entities einfügen soll. Mir ist aber aufgefallen, dass das nicht mehr geht, und zwar weil entities innerhalb dieser Methode anscheinend NULL ist. Dabei müsste das Attribut, aus dem Konstruktor gespeichert, doch mit der anderen Methode wieder abrufbar sein, oder?</p>
<p>Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254969</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Wed, 28 Mar 2007 20:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Thu, 29 Mar 2007 06:13:40 GMT]]></title><description><![CDATA[<p>Kannst du mal bitte etwas <strong>zusammenhängenden</strong> Code zeigen? (besonders wichtig ist hierbei die Frage, wo du dein <code>HTREEITEM entities;</code> stehen hast ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255067</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 29 Mar 2007 06:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Thu, 29 Mar 2007 10:41:31 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255209</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 29 Mar 2007 10:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Thu, 29 Mar 2007 11:41:16 GMT]]></title><description><![CDATA[<p>Klar, kein Problem. Sorry für falsches Forum, übrigens.</p>
<p>Im folgenden Code tritt das Problem in der Methode AddEntity auf. Und, ja, ich rufe auch wirklich dieselbe Instanz auf, keine andere.</p>
<pre><code class="language-cpp">class TreeView
{
public:
	TreeView() { };
	TreeView(HWND hwnd);
	~TreeView();

	void AddEntity();

private:
	TVINSERTSTRUCT tree_node;
	HTREEITEM root;
	HTREEITEM entities;
	HTREEITEM events;
	HWND tree_hwnd;
};

TreeView::TreeView(HWND hwnd) {
	tree_hwnd = hwnd;

	//insert root
	tree_node.hParent = NULL;
	tree_node.hInsertAfter = TVI_ROOT;
	tree_node.itemex.mask = TVIF_TEXT;
	tree_node.itemex.pszText = &quot;THN File&quot;/*theTHNExporter.ip-&gt;GetCurFileName()*/;
	root = (HTREEITEM)SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_INSERTITEM, 0, (LPARAM)&amp;tree_node); 

	//insert entities
	tree_node.hParent = root;
	tree_node.hInsertAfter = TVI_LAST;
	tree_node.itemex.pszText = &quot;entities&quot;;
	entities = (HTREEITEM)SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_INSERTITEM, 0, (LPARAM)&amp;tree_node);

	//expand root
	SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_EXPAND, TVE_EXPAND, (LPARAM)root);
}

void TreeView::AddEntity() {
    //Die folgende Bedingung ist nie wahr!
	if (entities != NULL)
		MessageBox(NULL, &quot;Entity tree node added!&quot;, &quot;Note&quot;, MB_OK);

	tree_node.hParent = entities;
	tree_node.hInsertAfter = TVI_LAST;
	tree_node.itemex.pszText = &quot;New Entity&quot;;
	SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_INSERTITEM, 0, (LPARAM)&amp;tree_node);

	//expand entities
	SendDlgItemMessage(tree_hwnd, IDC_TREE, TVM_EXPAND, TVE_EXPAND, (LPARAM)entities);
}
</code></pre>
<p>Möglicherweise wichtig ist vielleicht auch, dass die Klasse TreeView als Eigenschaft einer weiteren Klasse initialisiert wird. Von dieser Klasse werden auch Konstruktor und oben genannte Methode der Klasse TreeView aufgerufen. Da sieht es so aus:</p>
<pre><code class="language-cpp">class THNFile
{
public:
	THNFile();
	~THNFile();

	void SetNodes(HWND hwnd);
	void AddEntity();

private:
	TreeView tree;
/*.....*/
};

void THNFile::SetNodes(HWND hwnd) {
	TreeView tree(hwnd);
}

void THNFile::AddEntity() {
	tree.AddEntity();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1255254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255254</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Thu, 29 Mar 2007 11:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Thu, 29 Mar 2007 11:57:48 GMT]]></title><description><![CDATA[<p>Sniffman schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class THNFile
{
public:
	THNFile();
	~THNFile();
	
	void SetNodes(HWND hwnd);
	void AddEntity();

private:
	TreeView tree;
/*.....*/
};

void THNFile::SetNodes(HWND hwnd) {
	TreeView tree(hwnd);
}

void THNFile::AddEntity() {
	tree.AddEntity();
}
</code></pre>
</blockquote>
<p>Und es sind tatsächlich zwei verschiedene Instanzen - SetNodes() arbeitet mit einer lokalen Variablen 'tree', AddEntity() mit der Membervariable 'THNFile::tree' (letztere wurde per Default-Ctor erstellt). Vielleicht solltest du der TreeView()-Klasse eine Methode SetNodes spendieren, dann kann das THNFile noch nachträglich die Tree-Nodes justieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255262</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 29 Mar 2007 11:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Tree-View Control&#x2F;Klassenattribut on Thu, 29 Mar 2007 13:24:14 GMT]]></title><description><![CDATA[<p>Tatsächlich! Welch ein Anfängerfehler. <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>Na, jedenfalls schönen Dank dafür. Jetzt sollte es leicht sein, die Sache zu beheben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255338</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Thu, 29 Mar 2007 13:24:14 GMT</pubDate></item></channel></rss>