MFC CListCtrl的学习

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

//添加CListCtrl类型的控件变量m_list
CListCtrl   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中的内容就会被更新了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值