ListControl双击实现可编辑 2010-11-16 11:40

来源:互联网 发布:软件编程程序培训班 编辑:程序博客网 时间:2024/05/21 10:35

ON_NOTIFY 处理 listControl消息

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

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

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

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

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

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

01//映射响应鼠标双击和label编辑结束事件
02BEGIN_MESSAGE_MAP(CPage, CDialog)
03ON_NOTIFY(NM_DBLCLK, IDC_LIST, &CPage::OnNMDblclkList)
04ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST, &CPage::OnLvnEndlabeleditList)
05END_MESSAGE_MAP()
06-------------------------------------------------------------------------------
07void CPage::OnNMDblclkList(NMHDR *pNMHDR, LRESULT*pResult)
08{
09//双击事件产生edit控件,EditLabel会先确定list是否setFocus
10*pResult = 0;
11POSITION pos = m_List_Tip.GetFirstSelectedItemPosition();
12inttIndex = m_List_Tip.GetNextSelectedItem(pos);
13if( tIndex >= 0 )
14{
15m_List_Tip.SetFocus();
16CEdit* pEdit = m_List_Tip.EditLabel( tIndex );
17}
18}
19---------------------------------------------------------------------
20void CTipTrapPage::OnLvnEndlabeleditListTip(NMHDR *pNMHDR, LRESULT*pResult)
21{
22//edit编辑结束事件参数NMHDR *pNMHDR强制转换为对应结构体NMLVDISPINFO
23//可以得到当前list item的下标和edit的字符
24NMLVDISPINFO *pDispInfo =reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
25*pResult = 0;
26CString pName = pDispInfo->item.pszText;
27inttIndex = pDispInfo->item.iItem;
28m_List.SetFocus();
29if( ( ! pName.IsEmpty() ) && tIndex >= 0 )
30{
31m_List.SetItemText( tIndex, 0, pName);
32}
33}

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

上面的代码有误,但解决问题的思路是对的,请仔细使用

原创粉丝点击