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重命名
02 | BEGIN_MESSAGE_MAP(CPage, CDialog)
|
03 | ON_NOTIFY(NM_DBLCLK, IDC_LIST, &CPage::OnNMDblclkList) |
04 | ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST, &CPage::OnLvnEndlabeleditList) |
06 | ------------------------------------------------------------------------------- |
07 | void
CPage::OnNMDblclkList(NMHDR *pNMHDR, LRESULT*pResult)
|
11 | POSITION pos = m_List_Tip.GetFirstSelectedItemPosition(); |
12 | inttIndex = m_List_Tip.GetNextSelectedItem(pos);
|
16 | CEdit* pEdit = m_List_Tip.EditLabel( tIndex ); |
19 | --------------------------------------------------------------------- |
20 | void
CTipTrapPage::OnLvnEndlabeleditListTip(NMHDR *pNMHDR, LRESULT*pResult)
|
24 | NMLVDISPINFO *pDispInfo =reinterpret_cast<NMLVDISPINFO*>(pNMHDR); |
26 | CString pName = pDispInfo->item.pszText; |
27 | inttIndex = pDispInfo->item.iItem;
|
29 | if( ( ! pName.IsEmpty() ) && tIndex >= 0 ) |
31 | m_List.SetItemText( tIndex, 0, pName); |
最后别忘了勾上属性:list控件->属性->Styles->Edit labels
上面的代码有误,但解决问题的思路是对的,请仔细使用