MFC学习笔记-ListControl更改单元格显示

环境:VisualStudio2015中文
在对话框中添加一个ListControl和EditControl

1,转到对话框,选择ListControl控件的属性,将View=Report

2,转到对话框,选择ListControl控件,右击鼠标,在弹出对话框中选择,添加变量(Add Variables),给ListControl绑定一个变量(m_List)

3,转到对话框,选择EditControl控件,右击鼠标,在弹出对话框中选择,添加变量(Add Variables),给EditControl绑定一个变量(m_Edit_For_List)

4,转到对话框,选择ListControl控件,右击鼠标,在弹出对话框中选择-添加事件处理程序,在弹出对话框中选择消息类型=NM_CLICK,点击添加编辑(会自动生成处理函数,如:OnNumClickList1,也可以自己编辑)。

5,转到对话框,选择EditControl控件,右击鼠标,在弹出对话框中选择-添加事件处理程序,在弹出对话框中选择消息类型=EN_KILLFOCUS,点击添加编辑(会自动生成处理函数,如:OnEnChangeEdit1,也可以自己编辑)。

6, 在源文件代码中(Dialog.cpp),设置ListControl扩展样式

m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

7,在源文件代码中(如Dialog.cpp),给ListControl添加列(如下添加3列)

m_List.InsertColumn(0, L"测试列(宽100)", 0, 100);
m_List.InsertColumn(1, L"测试列(宽150)", 0, 150);
m_List.InsertColumn(2, L"测试列(宽200)", 0, 200);

8,在源文件代码中(如Dialog.cpp),给ListControl添加行(如下添加5行数据)

for (int nRowindex =0; nRowindex < 5; nRowindex++)
{
    m_List.InsertItem(nRowindex, L"序号");
    m_List.SetItemText(nRowindex, 1, "值1");
    m_List.SetItemText(nRowindex, 2,"值2");
}

9,在头文件代码中(如Dialog.h),添加两个变量记录ListControl点击选中的行和列

    int m_nRowIndex;
    int m_nColumnIndex;

10,在源文件代码中(如Dialog.cpp),针对消息NM_CLICK的处理函数OnNumClickList1添加代码

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->iItem != -1)
{
    m_nRowIndex = pNMListView->iItem;
    m_nColumnIndex = pNMListView->iSubItem;
    CRect rectListItem;//记录点击的位置
    m_List.GetSubItemRect(m_nRowIndex, m_nColumnIndex, LVIR_LABEL, rectListItem);

    if (m_Edit_For_List.GetParent() != &m_List)
    {
        m_Edit_For_List.SetParent(&m_List);
    }

    m_Edit_For_List.MoveWindow(&rectListItem);
    m_Edit_For_List.ShowWindow(SW_SHOW);
    m_Edit_For_List.SetWindowTextW(m_ListVariable.GetItemText(m_nRowIndex, m_nColumnIndex));
    m_Edit_For_List.SetFocus();
    m_Edit_For_List.SetSel(0, -1);

}
*pResult = 0;

11,在源文件代码中(如Dialog.cpp),针对消息EN_KILLFOCUS的处理函数OnEnChangeEdit1添加代码

    CString szEditContent;
    m_Edit_For_List.GetWindowTextW(szEditContent);
    m_List.SetItemText(m_nRowIndex, m_nColumnIndex, szEditContent);
    m_Edit_For_List.ShowWindow(SW_HIDE);

你可能感兴趣的:(MFC学习笔记)