mfc列表控件可编辑实例
时间: 2023-08-21 11:22:01 浏览: 100
下面是一个简单的MFC列表控件可编辑的示例:
1. 在对话框编辑器中添加一个列表控件,并设置其风格为“报表”;
2. 在代码中添加以下头文件和变量:
```cpp
#include <vector>
#include <string>
std::vector<std::vector<std::string>> m_data; // 存储列表数据
CListCtrl *m_listCtrl; // 列表控件指针
int m_editItem = -1; // 正在编辑的行
int m_editSubItem = -1; // 正在编辑的列
```
3. 在OnInitDialog()方法中获取列表控件的指针,并设置其风格:
```cpp
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 获取列表控件指针
m_listCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
// 设置列表风格
m_listCtrl->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
m_listCtrl->EnableEditLabels(TRUE);
// 添加表头
m_listCtrl->InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);
m_listCtrl->InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100);
// 添加数据
m_data.push_back({ "张三", "20" });
m_data.push_back({ "李四", "25" });
m_data.push_back({ "王五", "30" });
for (int i = 0; i < m_data.size(); i++) {
m_listCtrl->InsertItem(i, _T(""));
m_listCtrl->SetItemText(i, 0, CString(m_data[i][0].c_str()));
m_listCtrl->SetItemText(i, 1, CString(m_data[i][1].c_str()));
}
return TRUE;
}
```
4. 处理列表控件的WM_NOTIFY消息,实现编辑功能:
```cpp
BOOL CMyDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
NMHDR *pNMHDR = (NMHDR*)lParam;
if (pNMHDR->hwndFrom == m_listCtrl->m_hWnd) {
switch (pNMHDR->code) {
case LVN_BEGINLABELEDIT:
m_editItem = ((NMLVDISPINFO*)lParam)->item.iItem;
m_editSubItem = ((NMLVDISPINFO*)lParam)->item.iSubItem;
break;
case LVN_ENDLABELEDIT:
if (m_editItem >= 0 && m_editSubItem >= 0) {
CString text = m_listCtrl->GetEditControl()->GetWindowText();
m_data[m_editItem][m_editSubItem] = CT2A(text);
m_listCtrl->SetItemText(m_editItem, m_editSubItem, text);
}
m_editItem = -1;
m_editSubItem = -1;
break;
}
}
return CDialogEx::OnNotify(wParam, lParam, pResult);
}
```
这样,当用户双击列表项时,就可以编辑其内容了。编辑完成后,修改的数据将保存在m_data变量中。
阅读全文