⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap6_2.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _TV_ITEM </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{ tvi </span></p>
        <blockquote>
          <p ALIGN="left"><span style="font-size: 9pt">UINT&nbsp; mask; /*包含一些屏蔽位(下面的括号中列出)的组合,用来表明结构的哪些成员是有效的*/</span></p>
        </blockquote>
        <blockquote>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM hItem; //表项的句柄(TVIF_HANDLE)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT state; //表项的状态(TVIF_STATE)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT stateMask; //状态的屏蔽组合(TVIF_STATE)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPSTR pszText; //表项的标题正文(TVIF_TEXT)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cchTextMax; //正文缓冲区的大小(TVIF_TEXT)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iImage; //表项的图象索引(TVIF_IMAGE)</span></p>
        </blockquote>
        <blockquote>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iSelectedImage; //选中的项的图象索引(TVIF_SELECTEDIMAGE)</span></p>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cChildren; /*表明项是否有子项(TVIF_CHILDREN),为1则有,为0则没有*/</span></p>
        </blockquote>
        <blockquote>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPARAM lParam; //一个32位的附加数据(TVIF_PARAM)</span></p>
        </blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} TV_ITEM, FAR *LPTV_ITEM;</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">如果要使树形视图的表项显示图象,需要为树形视图建立一个位图序列,这时,iImage说明表项显示的图象在位图序列中的索引,iSelectedImage则说明了选中的表项应显示的图象,在绘制图标时,树形视图可以根据这两个参数提供的索引在位图序列中找到对应的位图.lParam可用来放置与表项相关的数据,这常常是很有用的.state和stateMask的常用值在表6.25中列出,其中stateMask用来说明要获取或设置哪些状态.</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">表6.25 
    树形视图表项项的常用状态</span></b></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
      <tr>
        <td WIDTH="29%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">状态</span></b></td>
        <td WIDTH="21%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">对应的状态屏蔽</span></b></td>
        <td WIDTH="49%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></b></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_SELECTED</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项被选中.</span></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_EXPANDED</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项的子项被展开.</span></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_EXPANDEDONCE</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项的子项曾经被展开过.</span></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_CUT</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项被选择用来进行剪切和粘贴操作.</span></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_FOCUSED</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项具有输入焦点.</span></td>
      </tr>
      <tr>
        <td WIDTH="29%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVIS_DROPHILITED</span></td>
        <td WIDTH="21%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">同左</span></td>
        <td WIDTH="49%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">项成为拖动操作的目标.</span></td>
      </tr>
    </table>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_INSERTSTRUCT结构.在向树形视图中插入新项时要用到该结构,其定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _TV_INSERTSTRUCT {</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM hParent; //父项的句柄 </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM hInsertAfter; //说明应插入到同层中哪一项的后面</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_ITEM item; </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} TV_INSERTSTRUCT;</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">如果hParent的值为TVI_ROOT或NULL,那么新项将被插入到树形视图的最高层(根位置).hInsertAfter的值可以是TVI_FIRST、TVI_LAST或TVI_SORT,其含义分别是将新项插入到同一层中的开头、最后或排序插入.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">NM_TREEVIEW结构.树形视图的大部分通知消息都会附带指向该结构的指针以提供一些必要的信息.该结构的定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _NM_TREEVIEW { nmtv </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">NMHDR hdr; //标准的NMHDR结构</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT action; //表明是用户的什么行为触发了该通知消息</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_ITEM itemOld; //旧项的信息</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_ITEM itemNew; //新项的信息</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">POINT ptDrag; //事件发生时鼠标的客户区坐标</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} NM_TREEVIEW; </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_KEYDOWN结构.提供与键盘事件有关的信息.该结构的定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">pedef struct _TV_KEYDOWN { tvkd </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">NMHDR hdr; //标准的NMHDR结构</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">WORD wVKey; //虚拟键盘码</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT flags; //为0</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} TV_KEYDOWN;</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_DISPINFO结构.提供与表项的显示有关的信息.该结构的定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _TV_DISPINFO { tvdi </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">NMHDR hdr; </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_ITEM item; </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} TV_DISPINFO;</span></p>
      </blockquote>
    </blockquote>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">MFC的CTreeCtrl类封装了树形视图.该类的Create成员函数负责控件的创建,该函数的声明为</span></p>
    <blockquote>
      <blockquote>
        <blockquote>
          <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL Create( DWORD dwStyle, const 
          RECT&amp; rect, CWnd* pParentWnd, UINT nID );</span></p>
        </blockquote>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">其中参数dwStyle是如表6.26所示的控件风格的组合.</span></p>
    <p ALIGN="JUSTIFY"><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">表6.26 树形视图的风格</span></b></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
      <tr>
        <td WIDTH="32%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件风格</span></b></td>
        <td WIDTH="68%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></b></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_HASLINES</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在父项与子项间连线以清楚地显示结构.</span></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_LINESATROOT</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">只在根部画线.</span></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_HASBUTTONS</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">显示带有"+"或"-"的小方框来表示某项能否被展开或已展开.</span></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_EDITLABELS</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">用户可以编辑表项的标题.</span></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_SHOWSELALWAYS</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">即使控件失去输入焦点,仍显示出项的选择状态.</span></td>
      </tr>
      <tr>
        <td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVS_DISABLEDRAGDROP</span></td>
        <td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">不支持拖动操作.</span></td>
      </tr>
    </table>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">除上表的风格外,一般还要指定WS_CHILD和WS_VISIBLE窗口风格.对于用对话框模板创建的树形视图控件,可以在控件的属性对话框中指定上表中列出的控件风格。例如,在属性对话框中选择Has 
    buttons,相当于指定了TVS_HASBUTTONS风格.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CTreeCtrl类提供了大量的成员函数.对于常用的函数,这里结合实际应用的需要,介绍如下:</span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -