在MFC中的CListCtrl的第二列中添加复选框 [英] Add Check box in second column in CListCtrl in MFC

查看:1116
本文介绍了在MFC中的CListCtrl的第二列中添加复选框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的MFC应用程序中,我使用OnCreate()函数在我的View类中添加了CListCtrl.我在该表中有10列和8行.我想在第二栏中包括复选框. 我的代码是

In my MFC application, im adding CListCtrl in my View class using OnCreate() function. I have 10 columns and 8 rows in that table. I want to include check box in second column . My code is

int CTrendView::OnCreate(LPCREATESTRUCT l)
{

m_ctLstCtrl.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT ,listRect, this, IDC_TRENDLISTCTRL);

    m_ctLstCtrl.SetExtendedStyle(m_ctLstCtrl.GetExtendedStyle()  | LVS_EX_GRIDLINES| LVS_EX_FULLROWSELECT| LVS_EX_ONECLICKACTIVATE );

    m_ctLstCtrl.SetBkColor(RGB(255,255,255));
    m_ctLstCtrl.SetTextColor(RGB(0,0,0));
    m_ctLstCtrl.SetTextBkColor(RGB(255,255,255));

    m_ctLstCtrl.InsertColumn(0,_T(""),LVCFMT_LEFT,10);
    m_ctLstCtrl.InsertColumn(1,_T("Visible"),LVCFMT_LEFT,50);
    m_ctLstCtrl.InsertColumn(2,_T("Status"),LVCFMT_LEFT,50);
    m_ctLstCtrl.InsertColumn(3,_T("Color"),LVCFMT_LEFT,50);
    m_ctLstCtrl.InsertColumn(4,_T("Object1"),LVCFMT_RIGHT,100);
    m_ctLstCtrl.InsertColumn(5,_T("Object2"),LVCFMT_RIGHT,100);
    m_ctLstCtrl.InsertColumn(6,_T("Desc"),LVCFMT_RIGHT,100);
    m_ctLstCtrl.InsertColumn(7,_T("Value"),LVCFMT_LEFT,100);
    m_ctLstCtrl.InsertColumn(8,_T("Low"),LVCFMT_LEFT,100);
    m_ctLstCtrl.InsertColumn(9,_T("High"),LVCFMT_LEFT,100);
}

我使用下面的函数在第三列和第四列中添加绿色.

Im using below function to add green color in third column and fourth column.

void CTrendView::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult )
{

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );

   *pResult = CDRF_DODEFAULT;

   switch(pLVCD->nmcd.dwDrawStage)
   {
   case CDDS_PREPAINT:
      *pResult = CDRF_NOTIFYITEMDRAW;
      break;

   case CDDS_ITEMPREPAINT:
      *pResult = CDRF_NOTIFYSUBITEMDRAW;
      break;

   case (CDDS_ITEMPREPAINT | CDDS_SUBITEM):  
       {
         if(pLVCD->iSubItem == 2 )                    
               pLVCD->clrTextBk  = RGB(0, 255, 0);  
         else
            pLVCD->clrTextBk  = RGB(255, 255, 255);
       }

       for(int i=0;i<8;i++)
       {
           if(pLVCD->nmcd.dwItemSpec == i && pLVCD->iSubItem == 3) 
                pLVCD->clrTextBk  = PenSelect[i];              
       }    
      break;
   }

}

使用从OnDraw()调用的一个Fucntion为其他列添加动态值.

For adding dynamic values for other columns im using one Fucntion getting called from OnDraw().

void DrawData(CDC *pDC,int iTagPos,CListCtrl &TagListctrl,CRect rect,int pType,float pScaleLow,float pScaleHigh, int TimeCursorPos,int pFlag,CString stime)
{

    int index;   
    CString sPV, sType;     
    sType = ".SV";
        if (TrendTempSV[TimeCursorPos] != -999999)
        {               
        sPV.Format ("%3.2f",TrendTempSV[TimeCursorPos]);            
        }
        else
          sPV.Format ("%s","**.** ");       


        CString sScaleLow,sScaleHigh,indexno;
        sScaleLow.Format ("%4.1f",pScaleLow);
        sScaleHigh.Format ("%4.1f", pScaleHigh);
        indexno.Format("%d",iTagPos+1);
        TagListctrl.SetRedraw( FALSE );
        TagListctrl.DeleteItem(iTagPos);
        index = TagListctrl.InsertItem(iTagPos,indexno);

        TagListctrl.SetItemText(iTagPos,4,"Object");
        TagListctrl.SetItemText(iTagPos,5,sName);
        TagListctrl.SetItemText(iTagPos,6,sDesc);
        TagListctrl.SetItemText(iTagPos,7,sPV);
        TagListctrl.SetItemText(iTagPos,8,sScaleLow);
        TagListctrl.SetItemText(iTagPos,9,sScaleHigh);
        TagListctrl.SetRedraw( TRUE );  

}

我想要可见"列下的复选框.为此,我包括| SetExtendedStyle中的LVS_EX_CHECKBOXES.

I want check box under 'Visible' column. FOr that, i include | LVS_EX_CHECKBOXES in SetExtendedStyle.

m_ctLstCtrl.SetExtendedStyle(m_ctLstCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES|
                                         LVS_EX_FULLROWSELECT|  LVS_EX_ONECLICKACTIVATE );

这样做,我面临以下问题.复选框出现在第一列,并带有索引号. ListCtrl开始闪烁,标题不可见,仅当我单击在listctrl中的某个位置时,每个列标题才会一一出现,并且listctrl的第六个也与以前不一样.我如何避免这种情况?

Im facing below problem by doing this. Checkbox appears in first column with index number. The ListCtrl start to flicker,headers are not visible,only when i click somwhere in listctrl each column header et appears one by one and the sixe of the listctrl also not same as previous. How can i avoid this?

推荐答案

此外,您还可以使用 CListCtrlExt(或CListViewExt),这不是自定义绘制!这意味着您可以完整保留OS样式,并且可以在每一列上放置任何类型的控件,包括复选框按钮...

Also, you can use CListCtrlExt (or CListViewExt), which are not custom draw !! that is mean you can have OS style intact and you can put on every column, any kind of control, including check box button ...

这篇关于在MFC中的CListCtrl的第二列中添加复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆