其中我用到了ClistCtrl的Report报表形式,此处便记录下相关的代码,本篇为list的初始化和单击单元格实现输入的功能
第一步就是添加ClistCtrl控件,然后为其添加变量,此处我们将其变量设为 m_list_input
。
ClistCtrl初始化
此处仅为示例代码,具体根据自己的项目修改
1 | CRect rect; |
单击单元格输入数据
首先,我们需要添加一个Edit控件,并为其设置默认不显示属性。对其添加变量为” m_edit_input “
接下来我们重写OnClick函数实现单击显示Edit控件并出现在相应的位置。代码如下
先在头文件中添加m_Row和m_Col,用来保存鼠标单击的行号和列标
1
2int m_Row = -1;
int m_Col = -1;在cpp文件OnClick中输入如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23void CxxxxProDlg::OnClickListInput(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CRect rc;
CString strTemp;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
m_Row = pNMListView->iItem;
m_Col = pNMListView->iSubItem;
if (m_Col != 0) // 选择子项
{
m_list_input.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);
m_edit_input.SetParent(&m_list_input);
m_edit_input.MoveWindow(rc);
m_edit_input.SetWindowTextW(m_list_input.GetItemText(m_Row, m_Col));
m_edit_input.ShowWindow(SW_SHOW);
m_edit_input.SetFocus();//设置Edit焦点
m_edit_input.ShowCaret();//显示光标
m_edit_input.SetSel(0, -1);//全选
}
*pResult = 0;
}
最后我们输入完数据后需要将该数据存入对应的单元格中,代码如下
1 | void CxxxxProDlg::OnKillfocusEdit1() |