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

📄 chap6_2.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">向树形视图中插入新的表项.首先应提供一个TV_INSERTSTRUCT结构并在该结构中对插入项进行描述.如果要在树形视图中显示图象,则应该先创建一个CImageList对象并使该对象包含一个位图序列,然后调用SetImageList为树形视图设置位图序列.然后调用InsertItem函数把新项插入到树形视图中.函数的声明为</span></p>
        <blockquote>
          <blockquote>
            <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CImageList* SetImageList( CImageList * 
            pImageList, int nImageListType );<br>
            参数pImageList指向一个CImageList对象,参数nImageListType一般应为TVSIL_NORMAL.</span></p>
            <p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM InsertItem( LPTV_INSERTSTRUCT 
            lpInsertStruct );<br>
            参数lpInsertStruct指向一个TV_INSERTSTRUCT结构.函数返回新插入项的句柄.</span></p>
          </blockquote>
        </blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">用DeleteItem来删除指定项,用DeleteAllItems删除所有项.函数的声明为<br>
        BOOL DeleteItem( HTREEITEM hItem );<br>
        BOOL DeleteAllItems( );<br>
        操作成功则函数返回TRUE,否则返回FALSE.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">树形视图控件会根据用户的输入自动展开或折叠子项.但有时需要在程序中展开或折叠指定项,则应该调用Expand,该函数的声明为<br>
        BOOL Expand( HTREEITEM hItem, UINT nCode );<br>
        参数hItem指定了要展开或折叠的项.参数nCode是一个标志,指定了函数应执行的操作,它可以是TVE_COLLAPSE(折叠)、TVE_COLLAPSERESET(折叠并移走所有的子项)、TVE_EXPAND(展开)或TVE_TOGGLE(在展开和折叠状态之间翻转).</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">要查询或设置选择项,应调用GetSelectedItem或SelectItem.函数的声明为<br>
        HTREEITEM GetSelectedItem( );<br>
        BOOL SelectItem( HTREEITEM hItem );</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">要对指定的项查询或设置,可调用GetItem和SetItem.用这两个功能强大的函数,几乎可以查询和设置项的所有属性,包括表项的正文、图像及选择状态.函数的声明为<br>
        BOOL GetItem( TV_ITEM* pItem );<br>
        BOOL SetItem( TV_ITEM* pItem );<br>
        参数pItem是指向TV_ITEM结构的指针,函数是通过该结构来查询或设置指定项的,在调用函数前应该使该结构的hItem成员有效以指定表项.CTreeCtrl还提供了一系列函数可完成GetItem和SetItem的部分功能,其中GetItemState、GetItemText、GetItemData、GetItemImage和ItemHasChildren函数用于查询,SetItemState、SetItemText、SetItemData和SetItemImage函数用于设置.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">在使用树形视图控件时,一个经常遇到的问题是对于一个已知表项,如何找到与该项有某种关系的项,例如,父项、子项、兄弟项、下一个或前一个可见的项.利用功能强大的GetNextItem函数,可以解决这个问题.该函数也可以用来搜索具有某种状态的表项.GetNextItem在遍历树形视图时是很有用的,它的声明为<br>
        HTREEITEM GetNextItem( HTREEITEM hItem, UINT nCode );<br>
        参数hItem指定了一个项.参数nCode是一个标志,标明了与指定项的关系,nCode可以是如表6.27所示的各种标志.如果找到相关的项,函数返回该项的句柄,否则函数返回NULL.</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">表6.27 关系标志</span></b></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">标志</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_CARET</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回当前的选择项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_CHILD</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定表项的子项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_DROPHILITE</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回拖动操作的目标项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_FIRSTVISIBLE</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回第一个可见项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_NEXT</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定项的下一个兄弟项(Sibling 
        Item).</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_NEXTVISIBLE</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定项的后一个可见项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_PARENT</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定项的父项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_PREVIOUS</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定项的前一个兄弟项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_PREVIOUSVISIBLE</span></td>
        <td WIDTH="53%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">返回指定项的前一个可见项.</span></td>
      </tr>
      <tr>
        <td WIDTH="47%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVGN_ROOT</span></td>
        <td WIDTH="53%"><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">CTreeCtrl类提供了一系列的成员函数来完成GetNextItem的某一项功能,包括GetRootItem、GetFirstVisibleItem、GetNextVisibleItem、GetPrevVisibleItem、GetChildItem、GetNextSiblingItem、GetPrevSiblingItem、GetParentItem、GetSelectedItem和GetDropHilightItem.</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">除了表6.22列出的控件消息外,树形视图控件还会发送自己特有的通知消息,其中常用的有下面这几个:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVN_SELCHANGING和TVN_SELCHANGED.在用户改变了对表项的选择时,控件会发送这两个消息.消息会附带一个指向NM_TREEVIEW结构的指针,程序可从该结构中获得必要的信息.两个消息都会在该结构的itemOld成员中包含原来的选择项的信息,在itemNew成员中包含新选择项的信息,在action成员中表明是用户的什么行为触发了该通知消息(若是TVC_BYKEYBOARD则表明是键盘,若是TVC_BYMOUSE则表明是鼠标,若是TVC_UNKNOWN则表示未知).两个消息的不同之处在于,如果TVN_SELCHANGING的消息处理函数返回TRUE,那么就阻止选择的改变,如果返回FALSE,则允许改变.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVN_KEYDOWN.该消息表明了一个键盘事件.消息会附带一个指向TV_KEYDOWN结构的指针,通过该结构程序可以获得按键的信息.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TVN_BEGINLABELEDIT和TVN_ENDLABELEDIT.分别在用户开始编辑和结束编辑项的标题时发送.消息会附带一个指向TV_DISPINFO结构的指针,程序可从该结构中获得必要的信息.在前者的消息处理函数中,可以调用GetEditControl成员函数返回一个指向用于编辑标题的编辑框的指针,如果处理函数返回FALSE,则允许编辑,如果返回TRUE,则禁止编辑.在后者的消息处理函数中,TV_DISPINFO结构中的item.pszText指向编辑后的新标题,如果pszText为NULL,那么说明用户放弃了编辑,否则,程序应负责更新项的标题,这可以由SetItem或SetItemText函数来完成.</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">树形视图控件还可以支持拖放操作,限于篇幅,这里就不作介绍了.</span></p>
    <b><p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.2.6 
    列表视图控件</font></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  列表视图(List View)用来成列地显示数据.在Windows 
    95的资源管理器的右侧窗口中就有一个典型的列表视图,如图6.5所示.列表视图的表项通常包括图标(Icon)和标题(Label)两部分,它们分别提供了对数据的形象和抽象描述.列表视图控件是对传统的列表框的重大改进,它能够以下列四种格式显示数据.读者可以在资源管理器中的视图(View)菜单中切换列表视图的显示格式,来看看四种格式的不同之处.</span></p>
    <blockquote>
      <ul>
        <li><p ALIGN="JUSTIFY"><span style="font-size: 9pt">大图标格式(Large Icons).可逐行显示多列表项,图标的大小可由应用程序指定,通常是32×32像素,在图标的下面显示标题.</span></p>
        </li>
        <li><p ALIGN="JUSTIFY"><span style="font-size: 9pt">小图标格式(Small Icons).可逐行显示多列表项,图标的大小可由应用程序指定,通常是16×16像素,在图标的右面显示标题.表项以行的方式组织.</span></p>
        </li>
        <li><p ALIGN="JUSTIFY"><span style="font-size: 9pt">列表格式(List).与小图标格式类似.不同之处在于表项是逐列多列显示的.</span></p>
        </li>
        <li><p ALIGN="JUSTIFY"><span style="font-size: 9pt">报告格式(Report或Details).每行仅显示一个表项,在标题的左边显示一个图标,表项可以不显示图标而只显示标题.表项的右边可以附加若干列子项(Subitem),子项只显示正文.在控件的顶端还可以显示一个列表头用来说明各列的类型.列表视图的报告格式很适合显示报表(如数据库报表).</span></p>
        </li>
      </ul>
    </blockquote>
    <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">LV_COLUMN结构.该结构仅用于报告式列表视图,用来描述表项的某一列.要想向表项中插入新的一列,需要用到该结构.LV_COLUMN结构的定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _LV_COLUMN { </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT mask; //屏蔽位的组合(见下面括号),表明哪些成员是有效的.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int fmt; /*该列的表头和子项的标题显示格式(LVCF_FMT).可以是LVCFMT_CENTER、LVCFMT_LEFT或LVCFMT_RIGHT*/</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cx; //以像素为单位的列的宽度(LVCF_FMT)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPTSTR pszText; //指向存放列表头标题正文的缓冲区(LVCF_TEXT)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cchTextMax; //标题正文缓冲区的长度(LVCF_TEXT)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iSubItem; //说明该列的索引(LVCF_SUBITEM)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} LV_COLUMN;</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LV_ITEM结构.该结构用来描述一个表项或子项,它包含了项的各种属性,其定义为</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _LV_ITEM { </span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT mask; //屏蔽位的组合(见下面括号),表明哪些成员是有效的</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iItem; //从0开始编号的表项索引(行索引)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iSubItem; /*从1开始编号的子项索引(列索引),若值为0则说明该成员无效,结构描述的是一个表项而不是子项*/</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT state; //项的状态(LVIF_STATE)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT stateMask; //项的状态屏蔽</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPTSTR pszText; //指向存放项的正文的缓冲区(LVIF_TEXT)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cchTextMax; //正文缓冲区的长度(LVIF_TEXT)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int iImage; //图标的索引(LVIF_IMAGE)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPARAM lParam; // 32位的附加数据(LVIF_PARAM)</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">} LV_ITEM;</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">其中lParam成员可用来存储与项相关的数据,这在有些情况下是很有用的.state和sta

⌨️ 快捷键说明

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