原来没有重绘控件时,扩展CheckBox可以显示
重绘后没有了  是不是在重绘时把它绘制出来,这个该怎么办?
在线求解,解决就结贴。我重绘的方法在drawItem中把标题和行颜色都改变了  导致没有checkbox  是不是要判断什么绘制呀   还是我的想法错了?谢谢!

解决方案 »

  1.   


    在drawitem中?   那这样绘制出来的checkbox和以前那个还一样么?响应是不是就变了?
      

  2.   

    自带的checkbox也是imglist来着
      

  3.   


    由于我重绘背景色和文件颜色 导致没有checkbox   我不知道该怎么将其绘制出来?
      

  4.   

    贴两图,一个带勾,一个不带勾。
    自己维护一个数据结构来表示Checked还是UnChecked的状态。
      

  5.   

    我能在drawItem中绘制出checkbox了 但我如何判断是否有这个扩展功能呢?我现在无论有无都绘制这个checkbox
      

  6.   

    LVS_EX_CHECKBOXES 判断这个属性。
      

  7.   


    在drawitem中哪个变量能判断这个属性?
      

  8.   

    重绘与选择画不画勾都没有问题了但还有两个问题请教:
    1. 我如何在绘制时判断是否有checkbox的扩展功能?
    2. 我在单击相应时如何判断选择了checkbox?我在子类中能画,但dialog里面的点击判断就不是以前的那样子了。以前的代码
    void CCableView::OnClickLstCableData(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);    m_nCurRowNum = pNMItemActivate->iItem;                                     //双击文件的索引    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        UINT uiflag ;
        m_comLstCable.HitTest( pNMListView->ptAction, &uiflag );
        //if (uiflag == LVHT_ONITEMSTATEICON)
        {//点击的是Checkbox
           //现在这里点击不出来了,我去掉判断可以,判断的uiflag永远=14    }
        *pResult = 0;
    }
      

  9.   

    1、通过控件风格来识别
    2、有相关函数可以判断复选框状态、我记得是GetCheck吧
      

  10.   


    1. 怎么通过控件风格判断?
    DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)函数只有这个结构体呀,判断哪个变量?
    2. GetCheck可以得到checkbox的状态,但我想要判断点击这个checkbox才行,才能取他的状态,我上面的函数是只要点击这行就取了,不是点击checkbox再取,不知道我解释清楚了么
      

  11.   

    DrawItem的时候GetCheck,就可以知道是不是Check了。
    然后Check状态画带勾的图。
    否则画不带勾的图。然后要不要画CheckBox,可以
    if (GetExtendedStyle() & LVS_EX_CHECKBOXES)
    //画
    else
    //不画
      

  12.   


    谢谢你,这个扩展功能问题解决了 
    就剩下一个问题:
    现在我的List控件的第一列是我自已绘制的checkbox和原来的字符串,我如何知道我点击了我的checkbox?按原来的ClistControl类的方法,就是我17楼的方法已经得不到点击了。我现在最笨的方法是每点击一行都判断一下,但我觉得这个不好。有没有直接判断点击了这个checkbox?是不是要在子类的down消息中传值上来呢?才知道点击了这个checkbox?我子类的down消息
        RECT rectiSubItem = {0};    int nItem = -1;
        nItem = HitTest(obPoint);//判断鼠标选择项
        GetSubItemRect(nItem, 0, LVIR_BOUNDS, (CRect&)rectiSubItem);
        rectiSubItem.left = 2;
        rectiSubItem.right = rectiSubItem.left + 12;
        if (PtInRect(&rectiSubItem, obPoint))
        {        
            m_bItemCheckState[nItem] = !m_bItemCheckState[nItem];
            InvalidateRect(NULL,FALSE);
        } CListCtrl::OnLButtonDown(iFlags, obPoint);