参考:http://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989421.html
该方法只是最简单最基本的编辑,若想直接用于复杂编辑,可继承CListCtrl,或者去下载别人已经封装好类。。。
首先,添加一个editbox,和一个CListCtrl,声明控件变量,
CListCtrl m_ctrlListMapSheetIndex;
CEdit m_ctrlEdit;
初始化时:
m_ctrlEdit.ShowWindow(SW_HIDE);
m_ctrlEdit.SetParent(&m_ctrlListMapSheetIndex);
//关于CListCtrl的样式,可根据需要设置
DWORD dwStyle = m_ctrlListMapSheetIndex.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_DOUBLEBUFFER;//内部双缓冲,防止list闪烁
m_ctrlListMapSheetIndex.SetExtendedStyle(dwStyle); //设置扩展风格
void StartToEdit()
{// 其中 m_nRow,m_nColoum为第几行,第几列
CRect rc;
m_ctrlListMapSheetIndex.GetSubItemRect(m_nRow, m_nColoum, LVIR_LABEL,rc);//取得子项的矩形
rc.left+=3;
rc.top+=2;
rc.right+=3;
rc.bottom+=2;
CString strText = m_ctrlListMapSheetIndex.GetItemText(m_nRow,m_nColoum);//取得子项的内容
m_ctrlEdit.SetWindowText(strText);//将子项的内容显示到编辑框中
m_ctrlEdit.ShowWindow(SW_SHOW);//显示编辑框
m_ctrlEdit.MoveWindow(&rc);//将编辑框移动到子项上面,覆盖在子项上
m_ctrlEdit.SetFocus();//使编辑框取得焦点
m_ctrlEdit.CreateSolidCaret(1,rc.Height() - 5);//创建一个光标
m_ctrlEdit.ShowCaret();//显示光标
m_ctrlEdit.SetSel(-1);//使光标移到最后面
}
然后,添加CEdit失去焦点时的消息EN_KILLFOCUS。在该消息中添加代码使编辑框中的内容更新到CListCtrl中。
///
CString strText;
m_ctrlEdit.GetWindowText(strText);//取得编辑框的内容
strText.Trim();
m_ctrlListMapSheetIndex.SetItemText(m_nRow,m_nColoum,strText);//将该内容更新到CListCtrl中
m_ctrlEdit.ShowWindow(SW_HIDE);//隐藏编辑框
/