簡體   English   中英

在MFC中更改可透析復選框的背景顏色

[英]Changing background color for diasabled check Box in MFC

我正在MFC Windows應用程序中工作。 我正在使用Check List Box控件( CCheckListBox類)中的復選框。 禁用復選框時,其顏色保持灰色。 有什么方法可以將背景顏色從灰色更改為另一種顏色?

您可以使用DrawItem方法來控制控件及其列表項的呈現。 為此,您需要派生自己的CCheckListBox類並實現該方法。 例如,我將列表中的第二項更改為紅色。

在此處輸入圖片說明

執行此操作的示例代碼如下:

void MyCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    UINT index = lpDrawItemStruct->itemID;
    CDC *pDC = CDC::FromHandle (lpDrawItemStruct->hDC);
    if (index == 1)
    {
        CRect rect = lpDrawItemStruct->rcItem;
        pDC->FillSolidRect(&rect, RGB(255, 0, 0));
    }
    CString str;
    GetText(index, str);
    pDC->DrawText(str, &lpDrawItemStruct->rcItem, DT_LEFT | DT_VCENTER);
}

上面的示例更改了項目的背景色。 我把剩下的處理工作和所有多余的渲染留給您了。

@rrirower的實現可以工作,但是他的代碼需要進行一些修改。

(1)更改禁用復選框的背景顏色

void CMyCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
  CDC dc;
  dc.Attach(lpDrawItemStruct ->hDC);
  RECT rect = lpDrawItemStruct ->rcItem;
  UINT nId=lpDrawItemStruct->itemID;
  CString strItemText;
  GetText(lpDrawItemStruct ->itemID, strItemText);
  if(nId==1 ||nId==3){
    dc.FillSolidRect(&rect,RGB(255,0,0));
    dc.DrawText(strItemText , &rect, DT_LEFT | DT_VCENTER);
  }
  else{
    CCheckListBox::DrawItem(lpDrawItemStruct); 
  } 
  dc.Detach();
}    

在此處輸入圖片說明

(2)更改“禁用”復選框列表文本的顏色
替換dc.FillSolidRect(&rect,RGB(255,0,0)); dc.SetTextColor(RGB(255,0,0));

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM