编辑非第一列Item的Label

作者:刘树伟
日期:2015-10-18

当Win32的List控件选中“Edit Label”风格后,List第0列Item可以被编辑,默认情况下,只有第0列的Item可以被编辑。但List提供了交换列索引的功能,我们可以把第0列与想要被编辑的列交换顺序,达到编辑非第0列的目的。
    m_list.InsertColumn(0, _T("Column 0"), LVCFMT_LEFT, 100);
    m_list.InsertColumn(1, _T("Column 1"), LVCFMT_LEFT, 100);
    m_list.InsertColumn(2, _T("Column 2"), LVCFMT_LEFT, 100);

    int nIndex = m_list.InsertItem(0, _T("Item 0"));
    m_list.SetItemText(nIndex, 1, _T("Subitem 1"));
    m_list.SetItemText(nIndex, 2, _T("Subitem 2"));
    
    // 下面的代码,把第2列变成第0列。需要注意的是:SetColumn是把第2列“插入”第0列前,第0列右面的列依次右移,而不是交换第2列和第0列。调用完SetColumn之后,显示出来的顺序是2、0、1,而不是2、1、0。调用完SetColumn之后,第2列就可以编辑了。需要注意的第二点是,虽然调用SetColumn之后,界面上列的顺序改变了,但在List内部,并没有任何变化,列的索引也没有变化,界面上的第0列,在内部仍然是第2列。调用    CString str = m_list.GetItemText(0, 2)之后,str的内部仍然是"Subitem 2"。

    LVCOLUMN col;
    col.mask = LVCF_ORDER;
    col.iOrder = 0;
    m_list.SetColumn(2, &col);

    // 调用完SetColumn之后,界面上只有Header移动了位置,Item并没有改变,需要调用Invalidate刷新一下界面。
    m_list.Invalidate();
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值