List Control 已经显示了很多行。选中其中的一行,触发鼠标点击事件。具体代码如下: 
我把源代码帖出,大家看一下。 void CDBAccessDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) 

//-- Get the number of selected rows 
int nSelRows = m_ListControl.GetSelectedCount();       // 用GetSelectedCount()方法,返回0. 
//int nSelRows = m_ListControl.GetSelectionMark();   //用GetSelectionMark()方法,返回-1. 
if(!nSelRows) //-- If there are no rows selected,jump out here 
return; AfxMessageBox(_T("One JOB was selected!")); 
//-- Get the position of the first selected row 
POSITION pos =m_ListControl.GetFirstSelectedItemPosition(); //-- Get the index of next selected row 
int i = m_ListControl.GetNextSelectedItem(pos); TRACE("First Item %d\n",i); if (i != -1) //-- Execute this loop as long as GetNextSelectedItem() returns -1 m_selectJobID = m_ListControl.GetItemText(i, 0); 
return; *pResult = 0; 

解决方案 »

  1.   

    LZ要实现什么?发出NM_CLICK通知的时候控件还没有处理选择,你可以改成响应LVN_ITEMACTIVATE通知。
      

  2.   

    不知道你调用的是什么消息,如果是选中某一行的话一般处理都是 LVN_ITEMCHANGED 消息, m_ListControl.GetSelectionMark()就会是选中的那一行的索引
    至于多方选中,要先设置可以多行选中的style的
      

  3.   

    BEGIN_MSG_MAP(CPPNoname)
    NOTIFY_HANDLER(IDC_KLIST,LVN_ITEMACTIVATE,OnList)
            下面的就不写了,消息映射         在ONLIST函数体里面如下处理
    m_currentitem = m_list.GetNextItem(-1,LVNI_SELECTED|LVNI_FOCUSED);
    m_list.GetItemText(m_currentitem,1,m_nbcheck);
    m_list.SetItemText(m_currentitem,1,_T("”)"));
            我只是改了个名,你可以做其它操作了
      

  4.   

    响应LVN_ITEMACTIVATE通知就可以,此外也可以在响应NM_CLICK通知时用CListCtrl的HitTest函数来得到鼠标点击的Item。