ListControl双击实现可编辑

ON_NOTIFY处理listControl消息

   

   列表控件的消息映射同样使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn),wNotifyCode为通知代码,id为产生该消息的窗口ID,memberFxn为处理函数,函数的原型如同voidOnXXXList(NMHDR* pNMHDR, LRESULT*pResult),其中pNMHDR为一数据结构,在具体使用时需要转换成其他类型的结构。对于列表控件可能取值和对应的数据结构为:

  ·LVN_BEGINLABELEDIT在开始某项编辑字符时发送,所用结构:NMLVDISPINFO

  ·LVN_ENDLABELEDIT在结束某项编辑字符时发送,所用结构:NMLVDISPINFO

  ·LVN_GETDISPINFO在需要得到某项信息时发送,(如得到某项的显示字符)所用结构:NMLVDISPINFO

============= 以上理论转载,应用范例如下=================

范例:双击list item实现item重命名

//映射响应鼠标双击和label编辑结束事件

BEGIN_MESSAGE_MAP(CPage, CDialog)

    ON_NOTIFY(NM_DBLCLK, IDC_LIST,&CPage::OnNMDblclkList)
    ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST,&CPage::OnLvnEndlabeleditList)
END_MESSAGE_MAP()

-------------------------------------------------------------------------------

void CPage::OnNMDblclkList(NMHDR *pNMHDR, LRESULT*pResult)
{

//双击事件产生edit控件,EditLabel会先确定list是否setFocus
    *pResult = 0;
    POSITION pos = m_List_Tip.GetFirstSelectedItemPosition();
    int tIndex = m_List_Tip.GetNextSelectedItem(pos);

    if ( tIndex >= 0 )
    {
        m_List_Tip.SetFocus();
       CEdit* pEdit = m_List_Tip.EditLabel( tIndex );
    }
}

---------------------------------------------------------------------

void CTipTrapPage::OnLvnEndlabeleditListTip(NMHDR*pNMHDR, LRESULT *pResult)
{

//edit编辑结束事件参数NMHDR*pNMHDR强制转换为对应结构体NMLVDISPINFO 

//可以得到当前list item的下标和edit的字符
    NMLVDISPINFO *pDispInfo =reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
    *pResult = 0;

    CString pName = pDispInfo->item.pszText;
    int tIndex = pDispInfo->item.iItem;
    m_List.SetFocus();

    if( ( ! pName.IsEmpty() ) && tIndex>= 0 )
    {
         m_List.SetItemText( tIndex, 0, pName);
    }

}

 

最后别忘了勾上属性:list控件->属性->Styles->Editlabels;





注意:开头的消息类型

HDN:Header   Notify
LVN:ListView   control   Notify
TVN:TreeView   control   Notify

NM:Notify   Message


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值