參考: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);//隱藏編輯框
/////////////////////////////////////////////////////////////////