MFC CListCtrl的学习

来源:互联网 发布:windows 2008 r2 安装 编辑:程序博客网 时间:2024/06/05 02:13

View
图标视图
每个项显示为一个大型图标(32 x 32像素)与标签在其下方。 用户可以通过拖动项添加到列表视图窗口中的任意位置。
小图标视图
每个项显示为一个小图标(16 x 16像素)与标签在右侧。 用户可以通过拖动项添加到列表视图窗口中的任意位置。
列表视图
每个项显示为带有标签的一个小图标在右侧。 项目在列排列,则无法拖到列表视图窗口的任何位置。
报告视图
每个项目中列都显示行,当附加信息排列右侧。 最左侧的列包含小图标和标签,因此,随后的列包含子项如指定由应用程序。
1.CListCtrl控件的添加:
View属性设为Report,即为报表风格,Single Selection属性设为True

//添加CListCtrl类型的控件变量m_listCListCtrl   m_list;
//参数rect为列表视图控件的位置和尺寸CRect rect;//获取编程语言列表视图控件的位置和大小m_list.GetClientRect(&rect);//为列表视图控件添加全行选中和栅格风格m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);//为列表视图控件添加三列m_list.InsertColumn(0, _T("序号"), LVCFMT_LEFT, rect.Width()/5, 0);   m_list.InsertColumn(1, _T("参数名"), LVCFMT_LEFT, rect.Width()/5*2, 1);   m_list.InsertColumn(2, _T("参数值"), LVCFMT_LEFT, rect.Width()/5*2, 2);//在列表视图控件中插入列表项,并设置列表子项文本m_list.InsertItem(0, _T("1"));   m_list.SetItemText(0, 1, _T("1"));   m_list.SetItemText(1, 2, _T("1"));

2.获得CListCtrl控件某行某列的值

int GetItemText(    int nItem,    int nSubItem,    LPTSTR lpszText,    int nLen  ) const; CString GetItemText(    int nItem, //行 The index of the item whose text is to be retrieved   int nSubItem  //列 Specifies the subitem whose text is to be retrieved.) const;
CString strVal = _T("");strVal = m_list.GetItemText(0, 2);

3.双击编辑CListCtrl中的数据
第一步:添加一个edit控件任意位置,并关联一个变量如:m_edit;,在OnInitDialog()函数中写入 m_edit.ShowWindow(SW_HIDE),作用为初始时将编辑框隐藏
第二步:添加一个CListCtrl控件,关键一个变量如:m_list;然后响应该控件的NM_DBLCLK消息,也就是双击事件处理消息
第三部:在双击事件处理函数中写入:

void CPosParaSettingDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) {    // TODO: Add your control notification handler code here    NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;    CRect rc;    m_Row = pNMListView->iItem;//获得选中的行    m_Col = pNMListView->iSubItem;//获得选中列    if   (pNMListView->iSubItem != 0) //如果选择的是子项;    {        m_list.GetSubItemRect(m_Row,m_Col,LVIR_LABEL,rc);//获得子项的RECT;        m_edit.SetParent(&m_list);//转换坐标为列表框中的坐标        m_edit.MoveWindow(rc);//移动Edit到RECT坐在的位置;        m_edit.SetWindowText(m_list.GetItemText(m_Row,m_Col));//将该子项中的值放在Edit控件中;        m_edit.ShowWindow(SW_SHOW);//显示Edit控件;        m_edit.SetFocus();//设置Edit焦点        m_edit.ShowCaret();//显示光标        m_edit.SetSel(-1);//将光标移动到最后    }    *pResult = 0;}

第四部:响应之前创建的那个edit的EN_KILLFOCUS消息,也就是失去编辑框焦点时的消息处理,此时应该把edit中的数据写到之前用户所点击的位置中,在该消息的处理函数中写入:

void CPosParaSettingDlg::OnKillfocusEdit() {    // TODO: Add your control notification handler code here    CString tem;    m_edit.GetWindowText(tem);    //得到用户输入的新的内容    m_list.SetItemText(m_Row,m_Col,tem);   //设置编辑框的新内容    m_edit.ShowWindow(SW_HIDE);                //应藏编辑框}

现在你所双击的CListCtrl中的内容就会被更新了

0 0
原创粉丝点击