来源:http://www.cnblogs.com/hongfei/archive/2012/12/25/2832806.html
LVN_ITEMCHANGED消息的处理
消息处理函数:
void C***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->uChanged==LVIF_STATE) { if(pNMListView->uNewState & LVIS_SELECTED) { //处理内容 int nItem=pNMListView->iItem; CString value[6]; for(int i=0;i<6;i++) { value[i]=m_List.GetItemText(nItem,i); } } } *pResult = 0; }
消息处理函数中的两个if条件句一定要有,否则可能出现多次进入处理内容的问题。
鼠标双击列表项事件的处理
响应NM_DBLCLK消息:
void CDisSalaryDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW *pNMListView=(NM_LISTVIEW *)pNMHDR; int nItem=pNMListView->iItem; if(nItem>=0 && nItem<m_List.GetItemCount())//判断双击位置是否在有数据的列表项上面 { ............. } *pResult = 0; }
消息处理函数中的if语句很重要,用于判断双击位置是否在有数据的列表项上面。因为NM_DBLCLK消息是CListCtrl控件(整体)消息,只要是在CListCtrl控件范围之内执行此事件就会产生该消息,而不一定要在有数据的列表项上面。