LVN_ITEMCHANGED(OnItemchanged)通知响应多次的问题
2013-07-08 10:04
585 查看
void CNewListCtrl::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW* pNMLV= (LPNMLISTVIEW*)pNMHDR;
*pResult = 0;
}
当从item = 0切换选择到item = 1的时候会响应三次LVN_ITEMCHANGED消息。如下所示:
(图 一)
(图 二)
(图 三)
在Debug调试模式下,参考(图 一)和(图 二)可以看到当从item = 0到item = 1的选择过程中,其中两次LVN_ITEMCHANGED消息会针对item = 0这一项,可以看到NMLISTVIEW这个结构体中的uOldState状态值由2 -> 1,即由LVIS_SELECTED状态转成LVIS_FOCUSED状态。第三次的LVN_ITEMCHANGED消息才是响应新item = 1的。可以从(图 三)看到uNewState的状态值为3.即(LVIS_FOCUSED | LVIS_SELECTED)两个相与的值。
所以只要改成如下就不会重复执行了:
// 在CListCtrl派生类中响应LVN_ITEMCHANGED消息
void CNewListCtrl::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW* pNMLV= (LPNMLISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(LVIF_STATE == pNMLV->uChanged && (pNMLV->uNewState & LVIS_FOCUSED) && (pNMLV->uNewState & LVIS_SELECTED))
{
...........
}
//或者
if(LVIF_STATE == pNMLV->uChanged && (pNMLV->uNewState ==3))
{
...........
}
*pResult = 0;
}
{
LPNMLISTVIEW* pNMLV= (LPNMLISTVIEW*)pNMHDR;
*pResult = 0;
}
当从item = 0切换选择到item = 1的时候会响应三次LVN_ITEMCHANGED消息。如下所示:
(图 一)
(图 二)
(图 三)
在Debug调试模式下,参考(图 一)和(图 二)可以看到当从item = 0到item = 1的选择过程中,其中两次LVN_ITEMCHANGED消息会针对item = 0这一项,可以看到NMLISTVIEW这个结构体中的uOldState状态值由2 -> 1,即由LVIS_SELECTED状态转成LVIS_FOCUSED状态。第三次的LVN_ITEMCHANGED消息才是响应新item = 1的。可以从(图 三)看到uNewState的状态值为3.即(LVIS_FOCUSED | LVIS_SELECTED)两个相与的值。
所以只要改成如下就不会重复执行了:
// 在CListCtrl派生类中响应LVN_ITEMCHANGED消息
void CNewListCtrl::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW* pNMLV= (LPNMLISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(LVIF_STATE == pNMLV->uChanged && (pNMLV->uNewState & LVIS_FOCUSED) && (pNMLV->uNewState & LVIS_SELECTED))
{
...........
}
//或者
if(LVIF_STATE == pNMLV->uChanged && (pNMLV->uNewState ==3))
{
...........
}
*pResult = 0;
}
相关文章推荐
- LVN_ITEMCHANGED通知会响应多次的问题
- LVN_ITEMCHANGED通知会响应多次的问题
- 大家有没有发现ListCtrl的LVN_ITEMCHANGED时间为什么连续响应3次,是不是vc的bug,急!!!
- 大家有没有发现ListCtrl的LVN_ITEMCHANGED时间为什么连续响应3次,是不是vc的bug,急!!!
- RadioGroup radiobutton 点击 onCheckedChanged()调用两次或多次 问题
- 在ListView的item项里使用CheckBox或者Button时,OnItemClickListener无响应的问题
- E/JavaBinder:FAILED BINDER TRANSACTION错误解决+RadioGroup调用check方法的时候,onCheckedChanged被调用多次的问题解决
- 单击ListCtrl时,LVN_ITEMCHANGED响应3次
- 在ListView的item项里使用CheckBox或者Button时,OnItemClickListener无响应的问题
- AppBarLayout: onOffsetChanged 多次滑动之后不再调用问题
- RadioGroup调用check(id)方法时,OnCheckedChangedListener被多次回调问题
- 在ListView的item项里使用CheckBox或者Button时,OnItemClickListener无响应的问题
- Qt开发 槽函数定义,以及槽函数二次响应多次响应问题
- RadioGroup调用check(id)方法时,onCheckedChanged方法被执行多次解决办法
- 调用startActivityForResult,onActivityResult无响应的问题
- Fragment中 onActivityResult不响应 + 有关onActivityResult提前调用的问题
- 关于 ExtAspNet 控件 Tree 嵌套在 Region Panel 内 OnNodeCommand 无响应的问题解决方法
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- 系统广播android.intent.action.DATE_CHANGED不响应的问题
- SwitchButton 的 setChecked 方法触发 onCheckedChanged 监听器的问题