MFC中ListControl列表控件创建使用

ListControl一般使用

1首先创建一个对话框,把listcontrol拖入到对话框中
2属性选择view设置为report会有栏目头显示
3右键添加ListControl类型的变量,利用变量操作控件
4在对话框的中的OnInitDialog函数中初始化控件,如果是自己定义的对话框放入到DoDataExchange函数中初始化控件
代码如下:

  	//插入表头
    m_Mylist.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 样式设置为整行选择、网格线
    m_Mylist.InsertColumn(0, _T("学号"), LVCFMT_LEFT, 100);	//插入第1列的列名
    m_Mylist.InsertColumn(1, _T("名字"), LVCFMT_LEFT, 100); // 插入第2列的列名
    m_Mylist.InsertColumn(2, _T("性别"), LVCFMT_LEFT, 100); // 插入第3列的列名    
    m_Mylist.InsertColumn(3, _T("出生日期"), LVCFMT_LEFT, 100); // 插入第4列的列名
    m_Mylist.InsertColumn(4, _T("爱好"), LVCFMT_LEFT, 100); // 插入第2列的列名

在数据显示到控件中,代码示例如下

 m_Mylist.DeleteAllItems(); // 全部清空,然后显示最新的
 for (int i = 0; i < 5; ++i)//显示30行
    {
        m_Mylist.InsertItem(i, _T("1102")); // 插入行
        m_Mylist.SetItemText(i, 1, _T("1102"));//第一个参数是第几行,第二个参数是第几列,第三个参数是显示的数据
        m_Mylist.SetItemText(i, 2, _T("1102"));
        m_Mylist.SetItemText(i, 3, _T("1102"));
        m_Mylist.SetItemText(i, 4, _T("1102"));
    }

ListControl双击修改列表框的内容

1:添加一个edit控件找任意位置,并关联一个变量如:m_edit;,在OnInitDialog()函数中设置初始化隐藏编辑框
m_edit.ShowWindow(SW_HIDE)
2:添加一个CListCtrl控件,关联一个变量如:m_Mylist;右键控件现在添加事件处理程序响应该控件的NM_DBLCLK消息,也就是双击鼠标左键事件处理消息
3:在双击事件处理函数中写入代码如下:

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    CRect rc;
    m_Row = pNMListView->iItem;//获得选中的行  
    m_Col = pNMListView->iSubItem;//获得选中列  
    m_Mylist.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT;  
    m_edit.SetParent(&m_Mylist);//转换坐标为列表框中的坐标  
    m_edit.MoveWindow(rc);//移动Edit到RECT坐在的位置;  
    m_edit.SetWindowText(m_Mylist.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;

4这时候可以使你的edit控件获得并且修改原来的数值,但是还无法保存到CListCtrl中,所以需要第四步:
在你的edit控件中右键添加事件处理程序响应 EN_KILLFOCUS消息(失去编辑框焦点时的消息处理),把edit中的数据写到之前用户所点击的位置中,在该消息的处理函数中写入:

 	CString cstTem;
    m_edit.GetWindowText(cstTem);    //得到用户输入的新的内容  
    m_Mylist.SetItemText(m_Row, m_Col, tem);   //把编辑框的新内容设置到列表控件的具体位置中  
    m_Myedit.ShowWindow(SW_HIDE);                //重新隐藏藏编辑框  
    return;

你可能感兴趣的:(MFC)