松鼠的博客

导航

统计

编辑 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;
    }

}
复制代码

 

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

posted on   Xproer-松鼠  阅读(722)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示