有一listview,属性设置为LVS_EX_CHECKBOXES,现在我需要在鼠标click时获取checkbox状态,应该如何实现,在nm_click中好象checkbox状态还未改变.谢谢

解决方案 »

  1.   

    void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
    (pNMListView->uNewState & LVIS_SELECTED) == 0)
    {
    // sTemp.Format("%d losted selected",pNMListView->iItem);
    }
    else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
    (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
    {
    //sTemp.Format("%d got selected",pNMListView->iItem);
    if( m_list.GetCheck(pNMListView->iItem) )
    {
    AfxMessageBox("选择");
    }
    else
    {
    AfxMessageBox("未选择");
    }
    }
    *pResult = 0;
    }
      

  2.   

    多谢DentistryDoctor(牙科医生),另外楼上的请教最外层的判断是什么用途,谢谢
      

  3.   

    感谢楼上的回答,我试了一下,好象点一下它会送过来好几次事件,而且状态有一样的,也有不一样的,而且item编号都一样,这就比较奇怪
      

  4.   

    给你完整的判断,自己研究一下吧。。什么时候失去焦点,什么时候得到焦点。以及得到选择,失去选择void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here

    CString sTemp;
    if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
    (pNMListView->uNewState & LVIS_FOCUSED) == 0)
    {
    sTemp.Format("%d losted focus",pNMListView->iItem);
    }
    else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
    (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
    {
    sTemp.Format("%d got focus",pNMListView->iItem);
    } if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
    (pNMListView->uNewState & LVIS_SELECTED) == 0)
    {
    sTemp.Format("%d losted selected",pNMListView->iItem);
    }
    else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
    (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
    {
    sTemp.Format("%d got selected",pNMListView->iItem);
    }
    *pResult = 0;
    }
      

  5.   

    我试了一下,很正确,但是对check状态似乎没什么作用
      

  6.   

    其实,你可以直接用NM_CLICK就可以解决问题void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    if(pNMListView->iItem != -1)
    {
    if(m_list.GetCheck(pNMListView->iItem))
    AfxMessageBox("选中");
    else
    AfxMessageBox("未选中");
    } *pResult = 0;
    }
      

  7.   

    click我试过的,它的缺陷在于收到消息的时候checkbox状态并未改变,不过我正在用你的代码做改造,成功马上结贴