您的位置:首页 > 其它

ListCtrl改变选中一行选择的处理

2013-03-05 18:19 337 查看
CListCtrl,CListView与LVN_ITEMCHANGED消息

若要在CListCtrl中行发生改变时得到通知,可以映射LVN_ITEMCHANGED消息。

ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemchanged)

afx_msg void OnItemchanged(NMHDR* pNMHDR,LRESULT* pResult);

// 行选择改变

void CMyListCtrl::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)

{

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

...您要进行的操作...

*pResult = 0;

}

注意,LVN_ITEMCHANGED消息的产生有以下几种可能:

1、由选中到没选中的变化;

2、由没选中到选中的变化;

3、由选中一行到选中另外一行的变化;

4、使用CListCtrl::SetItem函数更改了行;

如何检测LVN_ITEMCHANGED消息是由那一变化产生的呢?

NM_LISTVIEW结构成员变量uChanged和uNewState包含着这类信息,看如下代码:

void CRunListView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)

{

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

if(pNMListView->uChanged == LVIF_STATE)

{

if(pNMListView->uNewState)

TRACE0("选择改变且有选中的行\r\n");

else

TRACE0("选择改变且没有选中的行\r\n");

}

else

TRACE0("行改变(CListCtrl::SetItem)\r\n");

*pResult = 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: