這個(gè)功能其實(shí)很簡單,就是在雙擊是將CEdit控件顯示在對(duì)應(yīng)的位置即可,同時(shí)填充應(yīng)有的內(nèi)容,鼠標(biāo)離開時(shí)將內(nèi)容賦值與CListCtrl即可。
我寫在這里只是為了備份一下而已。
1.
void CEditListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
if (m_bEdit)
{ //獲取鼠標(biāo)所在的list控件子表項(xiàng)
LVHITTESTINFO lvhti; //保存ListCtrl行列信息的結(jié)構(gòu)
lvhti.pt = point;
m_item = CListCtrl::SubItemHitTest(&lvhti);
if (m_item == -1)
return;
m_sub_item = lvhti.iSubItem;
if (m_edit_l != 1)
m_sub_item = m_edit_l;
//用來顯示編輯框
show_edit(m_item, m_sub_item);
}
CListCtrl::OnLButtonUp(nFlags, point);
}
void CEditListCtrl::show_edit(int item, int sub_item)
{
CRect rect;
m_item = item;
m_sub_item = sub_item;
CListCtrl::GetSubItemRect(item, sub_item, LVIR_LABEL, rect); //獲取子表項(xiàng)的大小
if (m_edit.m_hWnd == NULL)
{ //創(chuàng)建編輯框和設(shè)置編輯框中的字體
m_edit.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(0,0,0,0),this,IDC_EDIT);
m_edit.ShowWindow(SW_HIDE);
CFont tpFont;
tpFont.CreateStockObject(DEFAULT_GUI_FONT);
m_edit.SetFont(&tpFont);
tpFont.DeleteObject();
}
//將編輯框移動(dòng)到子表項(xiàng)所在的位置,并將焦點(diǎn)設(shè)置在編輯框中
CString strItem = CListCtrl::GetItemText(item, sub_item);
rect.top -= 2; // 防止上邊框被遮擋
m_edit.MoveWindow(&rect);
m_edit.ShowWindow(SW_SHOW);
m_edit.SetWindowText(strItem);//設(shè)置編輯框的內(nèi)容為字表項(xiàng)的內(nèi)容
m_edit.SetFocus();
m_edit.SetSel(-1);
}
2.
LRESULT CEditListCtrl::OnEditEnd(WPARAM wParam,LPARAM lParam)
{
CString strText;
m_edit.GetWindowText(strText);
CListCtrl::SetItemText(m_item, m_sub_item, strText); //把編輯框中的內(nèi)容設(shè)置為子表項(xiàng)的內(nèi)容
m_edit.ShowWindow(SW_HIDE); //將編輯框隱藏
return 0;
}
3.
void CListCtrlEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
// TODO: 在此處添加消息處理程序代碼
//向父窗口發(fā)消息
CWnd* pParent = this->GetParent();
::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,0,0);
}