列表视图和树形视图

CListCtrl 类封装了列表视图控件
GetBkColor 获取列表视图控件的背景色
SetBkColor 设置列表视图控件的背景色
GetImageList 获取一个滑动块控件的行大小
SetImageList 指定一个图像列表到列表视图控件
GetItemCount 获取列表视图控件中的项的数量
GetItem 获取列表视图项的属性
GetCallbackMask 获取列表视图控件的回调掩码
SetCallbackMask 设置列表视图控件的回调掩码
GetNextItem 查找指定特性和指定项关系的列表视图项
GetFirstSeletedItemPosition 在列表视图控件中获取第一个选择的列表视图项的位置
GetNextSeletedItem 为重复而获取下一个选择的列表视图
GetItemRect 获取项的有界矩形
1.列的插入和删除
在以报告格式显示列表视图时,一般会显示一列表项和多列子项。在初始化列表视图时,
先要调用 InsertColumn()插入各个列,该函数的声明为:
int InsertColumn( int nCol, const LV_COLUMN* pColumn );
其中参数 nCol 是新列的索引,参数 pColumn 指向一个 LV_COLUMN 结构,函数根据该结构来创建新的列。若插入成功,函数返回新列的索引,否则返回-1。

要删除某列,应调用 DeleteColumn()函数,其声明为:BOOL DeleteColumn( int nCol );

2.表项的插入与删除

(1)要插入新的表项,应调用 InsertItem()。如果要显示图标,则应该先创建一个CImageList 对象,然后调用 SetImageList()来为列表视图设置位图序列。函数 InsertItem()的声明为:int InsertItem( const LV_ITEM* pItem );。
参数 pItem 指向一个 LV_ITEM 结构,该结构提供了对表项的描述。若插入成功则函数 返回新表项的索引,否则返回−1。
函数 SetImageList()的声明为:CImageList* SetImageList( CImageList* pImageList, int nImageList );。

参数 pImageList 指向一个 CImageList 对象,参数 nImageList 用来指定图标的类型,若其值为 LVSIL_NORMAL,则位图序列用作显示大图标,若值为 LVSIL_SMALL,则位图序列用作显示小图标。可用该函数同时指定一套大图标和一套小图标

(2)要删除某表项,应调用 DeleteItem();要删除所有的项,应调用 DeleteAllItems()。如果表项被删除,其子项也被删除。函数的声明为:
BOOL DeleteItem( int nItem );
BOOL DeleteAllItems();

3.设置与查询
(1)调用 GetItemText()和 SetItemText()来查询和设置表项及子项显示的正文。SetItemText 的一个重要用途就是对子项进行初始化。函数的声明为:

int GetItemText( int nItem, int nSubItem, LPTSTR lpszText, int nLen ) const;
CString GetItemText( int nItem, int nSubItem ) const;
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );
参数 nItem 是表项的索引(行索引)。
参数 nSubItem 是子项的索引(列索引),若 nSubItem 为 0 则说明函数是针对表项的。
参数 lpszText 指向正文缓冲区,参数 nLen 说明了缓冲区的大小。第二个版本的 GetItemText 返回一个含有项的正文的 Cstring 对象。

(2)调用 GetItem()和 SetItem()来查询和设置。用这两个功能强大的函数,几乎可以查询和设置指定项的所有属性,包括正文、图标及选择状态。函数的声明为:
BOOL GetItem( LV_ITEM* pItem ) const;
BOOL SetItem( const LV_ITEM* pItem );
参数 pItem 是指向 LV_ITEM 结构的指针,函数是通过该结构来来查询或设置指定项的。

(3)CListCtrl 还提供了一系列函数可完成 GetItem()和 SetItem()的部分功能,其中 Get
ItemState()、GetItemText()和 GetItemData()函数用于查询,SetItemState()、SetItemText()和
SetItemData()函数用于设置.

(4)要查询表项的数目,应该调用 GetItemCount(),其声明为:int GetItemCount()。
(5)要寻找与指定表项相关的表项,或寻找具有某种状态的表项,应该调用 GetNextItem()。该函数的一个重要用处就是搜索被选择的表项。函数的声明为:
int GetNextItem( int nItem, int nFlags ) const;
参数 nItem 是指定项的索引,参数 nFlags 是如表 7-27 所示的标志,用来指定查询的关系。函数返回搜索到的表项的索引,若未找到则返回−1。

表 7-27 关系标志
标 志 含 义
LVNI_ABOVE 返回位于指定表项上方的表项
LVNI_ALL 缺省标志,返回指定表项的下一个表项(以索引为序)
LVNI_BELOW 返回位于指定表项下方的表项
LVNI_TOLEFT 返回位于指定表项左边的表项
LVNI_TORIGHT 返回位于指定表项右边的表项
LVNI_DROPHILITED 返回拖动操作的目标表项
LVNI_FOCUSED 返回具有输入焦点的表项
LVNI_SELECTED 返回被选择的表项

(6)要对表项进行排列、排序和搜索,可分别调用 Arrange()、SortItems()和 FindItems()函数来完成

(7)有时需要在列表视图创建后动态地改变其显示格式。例如,资源管理器中的列表视图就可以在 4 种显示格式之间切换。改变显示格式其实就是改变列表视图的风格,要改变控件的风格,应先调用::GetWindowLong()获取控件原来的风格,并对其进行修改,然后调用::SetWindowLong()设置新的风格。这两个函数不是成员函数,而是 Windows API 函数,用来查询和设置窗口的风格。

树形视图:
树形视图(Tree View)是一种特殊的列表,它能以树形分层结构显示数据。
树形视图是一种复杂的控件,它的复杂性体现在数据项之间具有分支和层次关系。例如,如果要向树形视图中加入新的项,则必需描述出该项与树形视图中已有项的相互关系,而不可能像往列表框中加入新项那样,调用一下 AddString()就可以了。

***注意:***树形视图可以在每一项标题的左边显示一幅图像,这使控件显得更加形象生动,但同时也增加了控件的复杂程度。

树形控件可以用于树形的结构,其中有一个根结点(Root),然后下面有许多子结点,而每个子结点上允许有一个或多个或没有子结点。MFC 中使用 CTreeCtrl 类来封装树形控件的各种操作。
1.折叠、查询表项
(1)树形视图控件会根据用户的输入自动展开或折叠子项,但有时需要展开或折叠指定项,就需要调用函数 Expand()。函数的声明为:
BOOL Expand( HTREEITEM hItem, UINT nCode );
参数 hItem 指定了要展开或折叠的项;
参数 nCode 是一个标志,指定了函数应执行的操作,它可以是 TVE_COLLAPSE(折
叠)、TVE_COLLAPSERESET(折叠并移走所有的子项)、TVE_EXPAND(展开)或 TVE_TOGGLE(在展开和折叠状态之间翻转)。

(2) 要查询或设置选择项,应调用 GetSelectedItem()或 SelectItem(),函数的声明为:
HTREEITEM GetSelectedItem();
BOOL SelectItem( HTREEITEM hItem );

要对指定的项查询或设置,可调用 GetItem()和 SetItem()。用这两个功能强大的函数,几乎可以查询和设置项的所有属性,包括表项的正文、图像及选择状态。函数的声明为:
BOOL GetItem( TV_ITEM* pItem );
BOOL SetItem( TV_ITEM* pItem );

参数 pItem 是指向 TV_ITEM 结构的指针,函数是通过该结构来查询或设置指定项的在调用函数前应该使该结构的 hItem 成员有效地指定表项.
CTreeCtrl 还提供了一系列函数可完成 GetItem()和 SetItem()的部分功能,其中 GetItemState()、GetItemText()、GetItemData()、GetItemImage()和ItemHasChildren()函数用于查询,而SetItemState()、SetItemText()、SetItemData()和 和 SetItemImage()函数用于设置。
(3)在使用树形视图控件时,常用的操作是找到一个与已知表项有某种关系的项,例如,父项、子项、兄弟项、下一个或前一个可见的项等。利用 GetNextItem()函数,可实现这个功能。GetNextItem()在遍历树形视图时是很有用的,它的声明为:
HTREEITEM GetNextItem( HTREEITEM hItem, UINT nCode );

参数 hItem 指定了一个项;
参数 nCode 是一个标志,标明了与指定项的关系,nCode 可以是如表 7-30 所示的各
种标志。如果找到相关的项,函数返回该项的句柄,否则函数返回 NULL。

标 志 含 义
TVGN_CARET 返回当前的选择项
TVGN_CHILD 返回指定表项的子项
TVGN_DROPHILITE 返回拖动操作的目标项
TVGN_FIRSTVISIBLE 返回第一个可见项
TVGN_NEXT 返回指定项的下一个兄弟项(Sibling Item)
TVGN_NEXTVISIBLE 返回指定项的后一个可见项
TVGN_PARENT 返回指定项的父项
TVGN_PREVIOUS 返回指定项的前一个兄弟项
TVGN_PREVIOUSVISIBLE 返回指定项的前一个可见项
TVGN_ROOT 返回位于最高层(根位置)的第一个表项

列表框:设置表的类型:
m_list.InsertColumn(0," 标题",LVCFT_LEFT,75);
m_list.InsertColumn(1," 标题",LVCFT_LEFT,75);

http://www.jizhuomi.com/school/c/178.html
使用将最新的选择项实时显示到编辑框中,那么可以使用NM_CLICK通知消息…
首先要将获取点击的是多少行
CString strLangName;
NMLISTVIEW pNMListView = (NMLISTVIEW)pNMHDR;
int nltem = pNMListView->iltem…

int  nItem = pItem->iItem...//获取的行数
pItem是原函数的句柄:
SetDlgItemText(IDC_EDIT1,m_listInfo.GetItemText(nItem ,0));
SetDlgItemText(IDC_EDIT2,m_listInfo.GetItemText(nItem ,1));

表示的将获取到的nltem行的第几列的某元素与编辑框对应,显示到编辑框当中去。。。
一个获取数据。。Get
一个是设置数据。。Set

SetExtendedStyle:设置窗口的风格 // 为列表视图控件添加全行选中和栅格风格
m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

树形控件:

CImageList* SetImageList(CImageList * pImageList,int nImageListType);

   如果树节点需要显示图标时,则必须先创建一个CImageList类的对象,并为其添加多个图像组成一个图像序列,然后调用SetImageList函数为树形控件设置图像序列,在用InsertItem插入节点时传入所需图像在图像序列中的索引即可。后面的例子中会演示。参数pImageList为指向图像序列类CImageList的对象的指针,若为NULL则删除树形控件的所有图像。参数nImageListType指定图像序列的类型,可以是TVSIL_NORMAL(普通图像序列)或TVSIL_STATE(状态图像序列,用图像表示节点的状态)。

CString GetItemText(HTREEITEM hItem) const;
获取树形控件中某个指定节点的标签文本。参数hItem同上。返回值是包含标签文本的字符串。

BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);
为树形控件中某个指定节点设置标签文本。参数hItem同上,lpszItem为包含标签文本的字符串的指针。

HTREEITEM InsertItem(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent = TVI_ROOT,HTREEITEM hInsertAfter = TVI_LAST);
在树形控件中插入一个新节点。参数lpszItem为新节点的标签文本字符串的指针,参数nImage为新节点的图标在树形控件图像序列中的索引,参数nSelectedImage为新节点被选中时的图标在图像序列中的索引,参数hParent为插入节点的父节点的句柄,参数hInsertAfter为新节点的前一个节点的句柄,即新节点将被插入到hInsertAfter节点之后。

我们希望在选中节点改变时,将最新的选择项实时显示到编辑框中,那么可以响应TVN_SELCHANGED通知消息

InsertItem()和SetItemText()是一起用的,前者是表示向List控件申请一行来放数据,请记住,只是申请哦!而存放数据,对它进行具体操作的又是SetItemText()。这里值得一提的是如果不先调用InsertItem(),是没有用的哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

myx1027

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值