CListCtrl,CListView与LVN

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;
}

(0)

相关推荐