1.在类中定义CEdit控件
CEdit* m_edit;
2.窗口OnInitDialog创建窗口并设置父窗口为CListCtrl,设置字体
m_edit = new CEdit(); m_edit->Create(ES_LEFT | WS_CHILD | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), &m_lstRecord, 1); m_edit->SetFont(GetFont());
设置父窗口非常关键,因为下一步Edit需要MoveWindow,而列表控件GetSubItemRect返回的区域是以列表控件左上角为(0,0)点,因此在此处设置之后,后面MoveWindow将不需要再次对Edit控件进行坐标转换。
3.响应列表控件NM_DBLCLK消息
void CXXXDlg::OnNMDblclkListRecord(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); if (pNMItemActivate->iItem != -1) { // TODO: 在此添加控件通知处理程序代码 CRect rect; if (m_lstRecord.GetSubItemRect(pNMItemActivate->iItem, pNMItemActivate->iSubItem, LVIR_LABEL, rect)) { m_edit->MoveWindow(rect); m_edit->ShowWindow(SW_NORMAL); m_edit->SetWindowText(m_lstRecord.GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem)); m_edit->SetSel(0, -1);//全选编辑框的内容。 m_edit->ShowCaret();//显示光标 m_edit->SetFocus();//设置输入焦点在编辑框上 } } *pResult = 0; }
4.响应CEdit控件ON_EN_KILLFOCUS(失焦)消息
void CXXXDlg::OnEnKillfocusEditText() { // TODO: 在此添加控件通知处理程序代码 m_edit->ShowWindow(SW_HIDE); }
如果需要对单元格进行编辑,则在第3步将行、列记录在成员变量里,在第4步获取编辑框文本后,根据行、列设置回列表控件。
示例:
参考:
【1】https://blog.csdn.net/xiangzi890721/article/details/103809268
【2】https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cedit-class?view=msvc-170
标签:控件,MFC,CListCtrl,edit,CEdit,pNMItemActivate,WS,设置,双击 From: https://www.cnblogs.com/kuaixue/p/17926265.html