编辑 CListCtrl 的子项
(1)LVN_BEGINLABELEDIT消息响应代码:
void CSubeditListView::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;

//if (subitem selected for editing)
if (m_subitem)
{
ASSERT(m_item == pDispInfo->item.iItem);

CRect subrect;
GetListCtrl().GetSubItemRect( pDispInfo->item.iItem, m_subitem, LVIR_BOUNDS , subrect );

//get edit control and subclass
HWND hWnd=(HWND)SendMessage(LVM_GETEDITCONTROL);
ASSERT(hWnd!=NULL);
VERIFY(m_editWnd.SubclassWindow(hWnd));

//move edit control text 1 pixel to the right of org label, as Windows does it
m_editWnd.m_x=subrect.left + 6;
m_editWnd.SetWindowText(GetListCtrl().GetItemText(pDispInfo->item.iItem,m_subitem));

//hide subitem text so it don't show if we delete some text in the editcontrol
//OnPaint handles other issues also regarding this
CRect rect;
GetListCtrl().GetSubItemRect(pDispInfo->item.iItem,m_subitem,LVIR_LABEL ,rect);
CDC* hDc = GetDC();
hDc->FillRect(rect,&CBrush(::GetSysColor(COLOR_WINDOW)));
ReleaseDC(hDc);
}
//return: editing permitted
*pResult = 0;
}
(2)LVN_ENDLABELEDIT消息响应代码:
void CSubeditListView::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;
LV_ITEM *plvItem = &plvDispInfo->item;

//if (end of sub-editing) do cleanup
if (m_subitem)
{
//plvItem->pszText is NULL if editing canceled
if (plvItem->pszText != NULL )
GetListCtrl().SetItemText(plvItem->iItem,m_subitem, plvItem->pszText);

VERIFY(m_editWnd.UnsubclassWindow()!=NULL);

m_subitem = 0;
//allways revert to org label (Windows thinks we are editing the leftmost item)
*pResult = 0;
}
else
{
//return: update label on leftmost item
*pResult = 1;
}
}

































(2)LVN_ENDLABELEDIT消息响应代码:
























相关参考:
(1)http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c4175/
(2)http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c937/