编辑 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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了