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"));
}
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;