3.17 树控件
<p>树控件由CSkinTreeView类来代表,继承于CSkinListView,支持CSkinListView的所有属性和方法。</p>
<h2>1 属性和相关方法</h2>
<h4>3.1 插入子树节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void InsertItem(CSkinTreeItem* pParentItem, CSkinTreeItem* pItem);</code></pre></li>
</ul>
<h4>3.2 插入叶子节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void InsertItem(CSkinTreeItem* pParentItem, CSkinListItem* pItem);</code></pre></li>
</ul>
<h4>3.3 展开树节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void ExpandItem(CSkinTreeItem* pItem, BOOL bExpand);</code></pre></li>
</ul>
<h4>3.4 移除树节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void RemoveItem(CSkinTreeItem* pParentItem, CSkinListItem* pItem);</code></pre></li>
</ul>
<h4>3.5 删除树节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void DeleteItem(CSkinTreeItem* pParentItem, CSkinListItem* pItem);</code></pre></li>
</ul>
<h4>3.6 删除所有树节点</h4>
<ul>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void DeleteAllItem();</code></pre></li>
</ul>
<h2>请看下面的示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/3/17/1.png" alt="树控件" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml">&lt;SkinDialog DefaultWidth=&quot;445&quot; DefaultHeight=&quot;300&quot; SysButton=&quot;CLOSE&quot; Icon=&quot;128&quot; Caption=&quot;IDS_CONTROL_SHOW17&quot; Animation=&quot;SizeChange&quot;&gt;
&lt;SkinRelativeLayout LayoutWidth=&quot;150&quot; AlignParentLeft=&quot;15&quot; AlignParentTop=&quot;35&quot; AlignParentBottom=&quot;15&quot; BkgColor=&quot;ID_COLOR_WHITE&quot; Border=&quot;ID_COLOR_LINE&quot;&gt;
&lt;SkinTreeView Id=&quot;101&quot; AlignParentLeft=&quot;2&quot; AlignParentRight=&quot;2&quot; AlignParentTop=&quot;2&quot; AlignParentBottom=&quot;2&quot; VScrollBar=&quot;VScrollBar.xml&quot;&gt;
&lt;/SkinTreeView&gt;
&lt;/SkinRelativeLayout&gt;
&lt;SkinRelativeLayout LayoutWidth=&quot;250&quot; AlignParentRight=&quot;15&quot; AlignParentTop=&quot;35&quot; AlignParentBottom=&quot;15&quot; BkgColor=&quot;ID_COLOR_WHITE&quot; Border=&quot;ID_COLOR_LINE&quot;&gt;
&lt;SkinTreeView Id=&quot;201&quot; AlignParentLeft=&quot;2&quot; AlignParentRight=&quot;2&quot; AlignParentTop=&quot;2&quot; AlignParentBottom=&quot;2&quot; VScrollBar=&quot;VScrollBar.xml&quot;&gt;
&lt;/SkinTreeView&gt;
&lt;/SkinRelativeLayout&gt;
&lt;/SkinDialog&gt;</code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CTreeViewDialog : public CSkinDialog
{
public:
enum
{
IDC_TREEVIEW1 = 101,
IDC_TREEVIEW2 = 201,
};
public:
CTreeViewDialog();
public:
virtual void OnInitDialog();
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;TreeViewDialog.h&quot;
CTreeViewDialog::CTreeViewDialog()
: CSkinDialog(_T(&quot;ControlDialog17.xml&quot;))
{
}
static int nIndex = 1;
static BOOL bMale = FALSE;
void CTreeViewDialog::OnInitDialog()
{
CSkinDialog::OnInitDialog();
CSkinTreeView* pTreeView = static_cast&lt;CSkinTreeView*&gt;(GetChildById(IDC_TREEVIEW1));
if(pTreeView)
{
CSkinTreeItem* pRootItem = new CSkinTreeItem(pTreeView);
if(pRootItem)
{
pRootItem-&gt;ExpandItem(TRUE);
pRootItem-&gt;SetLayoutHeight(30);
pRootItem-&gt;SetLayout(_T(&quot;TreeItem.xml&quot;));
pRootItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pRootItem-&gt;SetChildText(100002, _T(&quot;RootItem&quot;));
pTreeView-&gt;InsertItem(NULL, pRootItem);
for(int j = 0; j &lt; 3; ++j)
{
CSkinTreeItem* pTreeItem = new CSkinTreeItem(pTreeView);
if(pTreeItem)
{
pTreeItem-&gt;SetLayoutHeight(30);
pTreeItem-&gt;SetLayout(_T(&quot;TreeItem.xml&quot;));
pTreeItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pTreeItem-&gt;SetChildText(100002, _T(&quot;TreeItem&quot;) + SkinUI::IntToString(j+1));
pTreeView-&gt;InsertItem(pRootItem, pTreeItem);
for(int k = 0; k &lt; 5; ++k)
{
CSkinListItem* pListItem = new CSkinListItem(pTreeView);
if(pListItem)
{
pListItem-&gt;SetLayoutHeight(30);
pListItem-&gt;SetLayout(_T(&quot;ListItem.xml&quot;));
pListItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pListItem-&gt;SetChildText(100001, _T(&quot;ListItem&quot;) + SkinUI::IntToString(k+1));
CSkinView* pSkinView = pListItem-&gt;GetChildById(100001);
if(pSkinView)
{
pSkinView-&gt;SetLayoutAlignParentLeft(10 + 16 * (pTreeItem-&gt;GetLevel() + 1));
}
pTreeView-&gt;InsertItem(pTreeItem, pListItem);
}
}
}
}
}
}
pTreeView = static_cast&lt;CSkinTreeView*&gt;(GetChildById(IDC_TREEVIEW2));
if(pTreeView)
{
CSkinTreeItem* pRootItem = new CSkinTreeItem(pTreeView);
if(pRootItem)
{
pRootItem-&gt;ExpandItem(TRUE);
pRootItem-&gt;SetLayoutHeight(30);
pRootItem-&gt;SetLayout(_T(&quot;TreeItem.xml&quot;));
pRootItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pRootItem-&gt;SetChildText(100002, _T(&quot;公司名称&quot;));
pTreeView-&gt;InsertItem(NULL, pRootItem);
for(int j = 0; j &lt; 3; ++j)
{
CSkinTreeItem* pTreeItem = new CSkinTreeItem(pTreeView);
if(pTreeItem)
{
pTreeItem-&gt;SetLayoutHeight(30);
pTreeItem-&gt;SetLayout(_T(&quot;TreeItem.xml&quot;));
pTreeItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pTreeItem-&gt;SetChildText(100002, _T(&quot;部门&quot;) + SkinUI::IntToString(j+1));
pTreeView-&gt;InsertItem(pRootItem, pTreeItem);
for(int k = 0; k &lt; 5; ++k)
{
CSkinListItem* pListItem = new CSkinListItem(pTreeView);
if(pListItem)
{
pListItem-&gt;SetLayoutHeight(30);
pListItem-&gt;SetImage(_T(&quot;ListItem.png&quot;));
pListItem-&gt;SetLayout(_T(&quot;UserListItem.xml&quot;));
pListItem-&gt;SetChildImage(100001, bMale ? _T(&quot;Male.png&quot;) : _T(&quot;Female.png&quot;));
pListItem-&gt;SetChildText(100002, _T(&quot;成员&quot;) + SkinUI::IntToString(nIndex++));
pListItem-&gt;SetChildText(100003, bMale ? _T(&quot;男&quot;) : _T(&quot;女&quot;));
CSkinView* pSkinView = *(pListItem-&gt;GetAllChild().begin());
if(pSkinView)
{
pSkinView-&gt;SetLayoutAlignParentLeft(5 + 16 * (pTreeItem-&gt;GetLevel() + 1));
}
bMale = !bMale;
pTreeView-&gt;InsertItem(pTreeItem, pListItem);
}
}
}
}
}
}
}</code></pre>