选中CListCtrl指定行并发送LVN_ITEMCHANGED消息

2011-03-29 22:04:19|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, MFC, 界面设计|来源:唯设编程网

在使用CListCtrl列表控件的程序中,当我们修改了CListCtrl后需要要定位到已修改的行,可以使用下面的函数实现:

//定位并使指定行选中
m_listReport.EnsureVisible(nIndex,FALSE);
m_listReport.SetItemState(nIndex,LVIS_SELECTED,LVIS_SELECTED);

但这远远不能满足需要,因为这种定位不具有在指定行上面鼠标单击选中的效果,为此我们需要向CListCtrl控件发送LVN_ITEMCHANGED消息,LVN_ITEMCHANGED是CListCtrl的WM_NOTIFY消息,其消息映射形式为ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, &CWorkAidDlg::OnTcnSelchangeTab),向指定控件发送WM_NOTIFY消息是一件比较麻烦的事情,该程序实现的 完整代码如下:

//使CListCtrl选中指定行并向CListCtrl发送LVN_ITEMCHANGED消息
//发送LVN_ITEMCHANGED消息
NMLISTVIEW nmlv ;
memset (&nmlv, 0, sizeof (nmlv)) ;
nmlv.hdr.hwndFrom = m_listReport.m_hWnd;
nmlv.hdr.idFrom = m_listReport.GetDlgCtrlID();//GetDlgCtrlId() ;0x00190ca4
nmlv.hdr.code = LVN_ITEMCHANGED;
nmlv.iItem = nIndex ;
nmlv.iSubItem=0;
nmlv.uNewState = 3 ;
nmlv.uOldState=0;
nmlv.uChanged=LVIF_STATE;
nmlv.lParam=0;
m_listReport.GetParent()->SendMessageA(WM_NOTIFY,nmlv.hdr.idFrom,(LPARAM)(&nmlv)) ; 

通过以上代码,我们就在VC程序中实现了自定义向CListCtrl控件发送LVN_ITEMCHANGED消息,其效果和鼠标在指定行上面单击是一样的!

发表评论0条 】
网友评论(共?条评论)..
选中CListCtrl指定行并发送LVN_ITEMCHANGED消息