Programming Technology

VC下MFC的CListCtrl的使用与技巧(Use CListCtrl)

1.CListCtrl显示样式的改变

  1. m_pCtrl = &this->GetListCtrl()//获得指针
  2.  
  3. //CListCtrl样式改变
  4. LONG lStyle;
  5. lStyle = GetWindowLong(m_pCtrl->m_hWnd, GWL_STYLE);     //获取当前窗口style
  6. lStyle &= ~LVS_TYPEMASK;        //清除显示方式
  7. lStyle |= LVS_REPORT;   //设置style为Report显示
  8. SetWindowLong(m_pCtrl->m_hWnd, GWL_STYLE, lStyle);     
  9.  
  10. //CListCtrl扩展样式改变
  11. DWORD dwStyle;
  12. dwStyle = m_pCtrl->GetStyle()//取得样式
  13. dwStyle |=  LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ;   //添加样式
  14. m_pCtrl->SetExtendedStyle(dwStyle);     //重新设置

需要的样式(根据自己的需要的样式选择)
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
LVS_EX_FULLROWSELECT: 表示选中某行使整行高亮(只适用与report风格的CListCtrl)
LVS_EX_GRIDLINES: 表示显示网格线(只适用与report风格的CListCtrl)

2.添加CListCtrl的记录

  1. //插入列
  2. m_pCtrl->InsertColumn(1,"第一列",LVCFMT_CENTER,47)//序号,标题,标题显示位置,列宽度
  3. m_pCtrl->InsertColumn(2,"第二列",LVCFMT_CENTER,100);
  4.  
  5. //写入数据
  6. int nRow = m_list.InsertItem(0, “无用字符串”)//插入行
  7. m_list.SetItemText(nRow, 1, “1111);        //设置数据
  8. m_list.SetItemText(nRow, 2, “2222);        //设置数据

3.判断CListCtrl的哪行记录被选中了

  1. int n = -1;
  2. POSITION pos = m_pCtrl->GetFirstSelectedItemPosition()//返回第一个选中的行位置
  3. if (pos != NULL)
  4. {
  5.    while (pos)
  6.    {
  7.                 n = m_pCtrl->GetNextSelectedItem(pos)//返回下一个选中的行数(返回值从0开始)
  8.                 //做相应操作
  9.    }
  10. }

4.响应单击CListCtrl事件

  1. //响应CMyListView的=NUM_CLICK消息
  2. //直接用VC类向导生成后,不用再次添加声明和消息映射
  3.  
  4. //添加函数声明
  5. afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
  6. //添加消息映射
  7. ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
  8.  
  9. void CMyListView::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
  10. {
  11.         // TODO: Add your control notification handler code here
  12.         NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  13.         if(pNMListView->iItem != -1)
  14.         {
  15.                 /*
  16.                 CString strtemp;
  17.                 strtemp.Format("单击的是第%d行第%d列",
  18.                                                 pNMListView->iItem, pNMListView->iSubItem);
  19.                 AfxMessageBox(strtemp);
  20.                 */
  21.                 //值从0开始计算,无数据区不相应时间
  22.                 //相应操作
  23.         }
  24.         *pResult = 0;
  25. }

5.CListCtrl单击表头排序(不会,待查)

发表评论 ( 如果您刚刚提交过评论,但是还没有被显示出来,请点击这里刷新一下: 刷新评论 )

标题

内容*

昵称*

电子邮件

个人网页


 authimage