我现在的程序是去读取一个数据库,将相应的服务器信息读到listctrl中。数据库中有两个字段:一个是bCheck, 一个是nResultlistctrl的风格为:
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);bCheck 为1时,在listctrl中的这一行记录前的CheckBox就勾上。nResult 为1表示升级成功。为0时表示升级失败。现在想实现的是:当bCheck = 1即CheckBox勾上了,且nResult = 1 即升级成功,这一行的为灰色的,不能编辑,点checkbox也没反应的那种.

解决方案 »

  1.   

    把数据从数据库中取出,在判断,不过在listctrl中我倒没做过使某一行不可用,你上网找找资料看有没有
      

  2.   

    void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    UINT nFlag; 
    int nItem = HitTest(point, &nFlag); 
    if (nFlag == LVHT_ONITEMSTATEICON) 

    afxDump << nItem << "  checkBox\n";

    //
    CListCtrl::OnMouseMove(nFlags, point);
    }
    以上代码可以检测鼠标在checkbox上。检测是不是checked,是时设个标记。
    customdraw时让这项变灰
      

  3.   

    你得自绘CListCtrl控件了,重写DrawItem虚函数。为每个item项关联一个enable/disable标记。
      

  4.   

    点checkbox也没反应的方法如下:
    void CMyListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    DWORD dwPos = GetMessagePos(); 
    CPoint point(LOWORD(dwPos), HIWORD(dwPos) ); 
    ScreenToClient(&point); 

    UINT nFlag; 
    int nItem = HitTest(point, &nFlag); 
    //判断是否点在checkbox上 
    if (nFlag == LVHT_ONITEMSTATEICON) 

    if(nItem==1)
    {
    *pResult = 1;// skip default
    return;
    }

    *pResult = 0;// do default
    }
      

  5.   

    参照4楼给出的方法,当点击某些指定的checkbox的时候,就给出提示,不让用户改变这一行的状态结帖了
      

  6.   

    参照4楼给出的方法,当点击某些指定的checkbox的时候,就给出提示,不让用户改变这一行的状态结帖了