一、添加checkbox
LVS_EX_CHECKBOXES就是勾选框,加了它listCtrl前面就有一个勾选框。
//初始化时设置
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVCFMT_CENTER | LVS_EX_CHECKBOXES);
如图所示:
二、代码实现
//全选
void CDlgNormalSend::OnBnClickedButtonselectall()
{
// TODO: 在此添加控件通知处理程序代码
for (int i = 0; i < m_listCtrl.GetItemCount(); i++)
{
m_listCtrl.SetCheck(i, TRUE);
}
}
//反选
void CDlgNormalSend::OnBnClickedButtonselectinvert()
{
// TODO: 在此添加控件通知处理程序代码
for (int i = 0; i < m_listCtrl.GetItemCount(); i++)
{
if (m_listCtrl.GetCheck(i) == FALSE) //未被选中的
{
m_listCtrl.SetCheck(i, TRUE);
}
else //选中的
{
m_listCtrl.SetCheck(i, FALSE);
}
}
}
三、双击编辑
1.拉一个edit控件,右键属性设置不可见。
2.右键listCtrl-添加事件处理程序-消息类型NM_DBLCLK,改为自己的实现类。
3.edit控件添加事件处理程序
edit控件右键-添加事件处理程序-消息类型EN_KILLFOCUS
4.实现代码
//双击修改
void CDlgNormalSend::OnNMDblclkListsendlist(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NMLISTVIEW* pNMListView = (NMLISTVIEW*)pNMHDR;
CRect rc;
m_Row = pNMListView->iItem;//获得选中的行
m_Col = pNMListView->iSubItem;//获得选中列
if (pNMListView->iSubItem != 0) //如果选择的是子项;
{
m_listCtrl.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT;
m_edit.SetParent(&m_listCtrl);//转换坐标为列表框中的坐标
m_edit.MoveWindow(rc);//移动Edit到RECT坐在的位置;
m_edit.SetWindowText(m_listCtrl.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;
}
void CDlgNormalSend::OnEnKillfocusEditedit()
{
// TODO: 在此添加控件通知处理程序代码
CString tem;
m_edit.GetWindowText(tem); //得到用户输入的新的内容
m_listCtrl.SetItemText(m_Row, m_Col, tem); //设置编辑框的新内容
m_edit.ShowWindow(SW_HIDE); //隐藏编辑框
}
ending。