环境: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);