簡體   English   中英

如何更改 CListCtrl 列的顏色

[英]How to change color of CListCtrl column

我想將特定列的背景顏色更改為對話框的顏色(灰色)。 我怎樣才能實現它?

void CUcsOpTerminalDlg::OnCustomdrawFeatureList(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

  // TODO: change color 

  *pResult = 0;
}

謝謝

如果使用的是“新的” MFC Feature Pack類(VS 2008 SP1及更高版本),則可以使用CMFCListCtrl而不是CListCtrl並使用CMFCListCtrl :: OnGetCellBkColor

您將必須從中派生自己的類,並重寫CMFCListCtrl :: OnGetCellBkColor 在那里,只需檢查列索引並返回所需的背景色即可:

COLORREF CMyColorfulListCtrl::OnGetCellBkColor(int nRow,int nColumn)
{
    if (nColumn == THE_COLUMN_IM_INTERESTED_IN)
    {
        return WHATEVER_COLOR_I_NEED;
    }
    return CMFCListCtrl::OnGetCellBkColor(nRow, nColumn);
}

或者,如果您需要通過對話框進行決策,則可以從該函數查詢對話框:

COLORREF CMyColorfulListCtrl::OnGetCellBkColor(int nRow,int nColumn)
{
    COLORREF color = GetParent()->SendMessage(UWM_QUERY_ITEM_COLOR, nRow, nColumn);

    if ( color == ((COLORREF)-1) ) 
    { // If the parent doesn't set the color, let the base class decide
        color = CMFCListCtrl::OnGetCellBkColor(nRow, nColumn);
    }    
    return color;
}

請注意,UWM_QUERY_ITEM_COLOR是自定義消息。 我通常使用“注冊Windows消息” ,如此處所述

簡短答案:在CDDS_ITEMPREPAINT階段填充clrText和clrText Bk字段。

我讀過的最好的文章。 第1 部分第2部分

自定義繪圖API不能完全如所宣傳的那樣工作。 無論如何,以下代碼會將第二列塗成綠色:

LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
*pResult = CDRF_DODEFAULT;
switch( pNMLVCD->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
    *pResult = CDRF_NOTIFYITEMDRAW;
    break;

case CDDS_ITEMPREPAINT:
    *pResult = CDRF_NOTIFYSUBITEMDRAW;
    break;

case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
    if( pNMLVCD->iSubItem == 1 )
        pNMLVCD->clrTextBk = RGB(0,255,0);
    break;
}

對於仍在努力使它在 2022 年發揮作用的任何可憐的靈魂,這是正確的答案: https://stackoverflow.com/a/19701300/5117411

但是,您還必須更改派生列表 class 中消息 map 聲明的第一行,來自:

BEGIN_MESSAGE_MAP(VV_Page_List_Box, CListCtrl)

BEGIN_MESSAGE_MAP(VV_Page_List_Box, CMFCListCtrl)

否則不會調用OnGetCellBkColor的虛擬覆蓋!

暫無
暫無

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

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