MFC 列表视图的使用

首先看一下列表视图的四种类型,类型之间的转换可以在属性中的VIEW

  Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。

  Small Icon小图标风格:列表项的图标通常为16×16像素,在图标的右面显示标签。

  List列表风格:与小图标风格类似,图标和文字的对齐方式不同。

    Report报表风格:列表视图控件可以包含一个列表头来描述各列的含义。每行显示一个列表项,通常可以包含多个列表子项。最左边的列表子项的标签左边可以添加一个图标,而它右边的所有子项则只能显示文字。这种风格的列表视图控件很适合做各种报表。

MFC为列表视图控件的操作提供了CListCtrl类。CListCtrl类中主要的成员函数有:

       UINT GetSelectedCount( ) const;

       该函数返回列表视图控件中被选择列表项的数量。

       POSITION GetFirstSelectedItemPosition( ) const;

       获取列表视图控件中第一个被选择项的位置。返回的POSITION值可以用来迭代来获取其他选择项,可以当作参数传入下面的GetNextSelectedItem函数来获得选择项的索引。如果没有被选择项则返回NULL

       int GetNextSelectedItem(POSITION& pos) const;

       该函数获取由pos指定的列表项的索引,然后将pos设置为下一个位置的POSITION值。参数pos为之前调用GetNextSelectedItemGetFirstSelectedItemPosition得到的POSITION值的引用。返回值就是pos指定列表项的索引。

       int GetItemCount( ) const;

       获取列表视图控件中列表项的数量。

       int InsertColumn(int nCol,const LVCOLUMN* pColumn );
       int InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat = LVCFMT_LEFT,int nWidth = -1,int nSubItem = -1 );

       这两个函数用于在报表式列表视图控件中插入列。第一个函数中,nCol参数为插入列的索引,pColumn参数指向LVCOLUMN结构,其中包含了插入列的属性。第二个函数中,nCol参数也是插入列的索引,lpszColumnHeading参数为列标题字符串,nFormat参数为列中文本的对齐方式,可以是LVCFMT_LEFTLVCFMT_RIGHTLVCFMT_CENTERnWidth参数为列宽,nSubItem为插入列对应列表子项的索引。两个函数在成功时都返回新列的索引,失败都返回-1

       BOOL DeleteColumn(int nCol);

       该函数用于删除列表视图控件中的某列。参数nCol为删除列的索引。删除成功则返回TRUE,失败返回FALSE

       int InsertItem(int nItem,LPCTSTR lpszItem);

       向列表视图控件中插入新的列表项。参数nItem为要插入项的索引,参数lpszItem为要插入项的标签字符串。如果插入成功则返回新列表项的索引,否则返回-1

       BOOL DeleteItem(int nItem);

       从列表视图控件中删除某个列表项。参数nItem指定了要删除的列表项的索引。删除成功则返回TRUE,否则返回FALSE

       CString GetItemText(int nItem,int nSubItem) const;

       获取指定列表项或列表子项的显示文本。参数nItem指定了列表项的索引,参数nSubItem指定了列表子项的索引。 

       BOOL SetItemText(int nItem,int nSubItem,LPCTSTR lpszText);

       设置指定列表项或列表子项的显示文本。参数nItemnSubItemGetItemText。参数lpszText为要设置的显示文本字符串。如果设置成功则返回TRUE,否则返回FALSE

       DWORD_PTR GetItemData(int nItem) const;

       该函数用于获取指定列表项的附加32位数据。参数nItem为列表项的索引。返回值就是由nItem指定列表项的附加32位数据。

       BOOL SetItemData(int nItem,DWORD_PTR dwData);

       该函数用于为指定列表项设置附加32位是数据。参数nItem为列表项的索引,参数dwData为列表项的附加32位数据。

   添加CListCtrl类型的控件变量m_programLangList,然后修改OnInitDialog()函数为:

1.      //  when the application's main window is not a dialog   

2.      SetIcon(m_hIcon, TRUE);         // Set big icon   

3.      SetIcon(m_hIcon, FALSE);        // Set small icon   

4.    

5.      // TODO: Add extra initialization here   

6.      CRect rect;   

7.    

8.      // 获取列表视图控件的位置和大小   

9.      m_programLangList.GetClientRect(&rect);   

10.  

11.    // 为列表视图控件添加全行选中和栅格风格   

12.    m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);   

13.  

14.    // 为列表视图控件添加三列   

15.    m_programLangList.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width()/3, 0);   

16.    m_programLangList.InsertColumn(1, _T("2012.02排名"), LVCFMT_CENTER, rect.Width()/3, 1);   

17.    m_programLangList.InsertColumn(2, _T("2011.02排名"), LVCFMT_CENTER, rect.Width()/3, 2);   

18.  

19.    // 在列表视图控件中插入列表项,并设置列表子项文本   

20.    m_programLangList.InsertItem(0, _T("Java"));   

21.    m_programLangList.SetItemText(0, 1, _T("1"));   

22.    m_programLangList.SetItemText(0, 2, _T("1"));   

23.    m_programLangList.InsertItem(1, _T("C"));   

24.    m_programLangList.SetItemText(1, 1, _T("2"));   

25.    m_programLangList.SetItemText(1, 2, _T("2"));   

26.    m_programLangList.InsertItem(2, _T("C#"));   

27.    m_programLangList.SetItemText(2, 1, _T("3"));   

28.    m_programLangList.SetItemText(2, 2, _T("6"));   

29.    m_programLangList.InsertItem(3, _T("C++"));   

30.    m_programLangList.SetItemText(3, 1, _T("4"));   

31.    m_programLangList.SetItemText(3, 2, _T("3"));   

32.  

33.    return TRUE;  // return TRUE  unless you set the focus to a control   

为列表框添加事件处理程序,选择NM_CLICK通知消息,点击列表框中的内容,并在编辑框中显示:

1.   LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);   

2.      // TODO: Add your control notification handler code here   

3.      *pResult = 0;   

4.    

5.      CString strLangName;    // 选择语言的名称字符串   

6.      NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;   

7.    

8.      if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就说明有列表项被选择   

9.      {   

10.        // 获取被选择列表项第一个子项的文本   

11.        strLangName = m_programLangList.GetItemText(pNMListView->iItem, 0);   

12.        // 将选择的语言显示与编辑框中   

        SetDlgItemText(IDC_EDIT1, strLangName);  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值