CListCtrl::SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED);

解决方案 »

  1.   


    void newctrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR);
        NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem > 0)
    {
      if( GetItemState(pNMListView->iItem, LVIS_SELECTED) == LVIS_SELECTED )
        SetItemState(pNMListView->iItem, ~LVIS_SELECTED, ~LVIS_SELECTED);
      else
    SetItemState(pNMListView->iItem, LVIS_SELECTED, LVIS_SELECTED); }*pResult = 0; 
    老大,按照你的做法,没有成功啊
      

  2.   

    选择SetItemState(pos, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
    去掉选择SetItemState(pos, 0, LVIS_SELECTED);
      

  3.   

    用选择框比较好!!
    m_List.ModifyStyle(LVS_TYPEMASK, LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL);
    m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
    m_List.InsertColumn(0, _T("第一列"), LVCFMT_LEFT, 100);
    m_List.InsertColumn(1, _T("第二列"), LVCFMT_LEFT, 100);
    m_List.InsertItem(m_List.GetItemCount(),_T("1"));
    m_List.SetItemText(m_List.GetItemCount()-1,1,_T("数据1"));
    m_List.SetItemText(m_List.GetItemCount()-1,2,_T("数据2"));
      

  4.   


    BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if((WM_LBUTTONDOWN == pMsg->message) && (m_list.GetSafeHwnd() == pMsg->hwnd))
    {
    CPoint pt;
    GetCursorPos(&pt);
    m_list.ScreenToClient(&pt);
    LVHITTESTINFO info = {0};
    info.pt = pt;
    info.flags = LVHT_ONITEMLABEL;
    if(-1 != m_list.SubItemHitTest(&info))
    {
    CString str;
    str.Format(_T("%d, %d"), info.iItem, info.iSubItem);
    SetWindowText(str);
    m_list.SetItemState(info.iItem, (LVIS_SELECTED == m_list.GetItemState(info.iItem, LVIS_SELECTED) ? 0 : LVIS_SELECTED), LVIS_SELECTED);
    return TRUE;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }至于需要高亮蓝色,你可能需要自绘,处理DrawItem虚函数
      

  5.   


    想这样的需求如果你不需要自绘,直接用更改State的做法,那么你在以后将很难进行控制.
    最好的方法是自绘.
      

  6.   

    谢谢各位,特别是部长。
    通过部长的代码和在自绘里面解决了。
        POSITION pos = GetFirstSelectedItemPosition();
    while(pos)
    {
    int index = GetNextSelectedItem(pos);
    if (lpDrawItemStruct->itemID == index)
    {
    //SetItemState(index, 0,LVIS_SELECTED);
    //SetItemState(index, LVIS_SELECTED, 0);
    pDC->FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT)) ; 
    pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
    }
               
    }
      

  7.   

    高亮蓝色,无需重绘,SetFocus()  就可以了。