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消息,其效果和鼠标在指定行上面单击是一样的!