ON_NOTIFY_REFLECT与ON_NOTIFY_REFLECT_EX

最近要实现CListCtrl的编辑功能,另外还要实现自动填充,在编辑完之后根据输入值自动填充其它列的值。

编辑功能是通过从CListCtrl派生一个类CEditListCtrl实现的。

CEditListCtrl中响应了LVN_ENDLABELEDIT消息,让其在编辑完成后设置Item的值:

ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndlabeledit)

void CEditListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{

LV_DISPINFO *plvDispInfo = (LV_DISPINFO*)pNMHDR;

LV_ITEM *plvItem = &plvDispInfo->item;

if (plvItem->pszText != NULL && plvItem->iItem != -1)

{

SetItemText(plvDispInfo->item.iItem, plvDispInfo->item.iSubItem, plvDispInfo->item.pszText);

}

*pResult = 0;

}


而自动填充的在对话框类中实现:

ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_TUFU, &CDlgEctronicMap::OnEndLabelEdit)

void CDlgEctronicMap::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{

LV_DISPINFO *plvDispInfo = (LV_DISPINFO*)pNMHDR;

LV_ITEM *plvItem = &plvDispInfo->item;

if (plvItem->pszText != NULL && plvItem->iItem != -1)

{

int nRow, nCol;

nRow = plvDispInfo->item.iItem;

nCol = plvDispInfo->item.iSubItem;

AuToFillListControl(nRow,nCol);

}

}

结果程序只处理了CEditListCtrl类中的LVN_ENDLABELEDIT,而CDlgEctronicMap中的该消息没有被处理。。。

郁闷过后百度了一下,看到别人用ON_NOTIFY_REFLECT_EX,果断一试,结果两个类的LVN_ENDLABELEDIT都处理了。

修改如下:

ON_NOTIFY_REFLECT_EX(LVN_ENDLABELEDIT, OnEndlabeledit)

BOOL CEditListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{

LV_DISPINFO *plvDispInfo = (LV_DISPINFO*)pNMHDR;

LV_ITEM *plvItem = &plvDispInfo->item;

if (plvItem->pszText != NULL && plvItem->iItem != -1)

{

SetItemText(plvDispInfo->item.iItem, plvDispInfo->item.iSubItem, plvDispInfo->item.pszText);

}

*pResult = 0;

return FALSE;//返回false让父类可以继续处理这个消息;

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值