簡體   English   中英

在MFC C ++中更改文本顏色?

[英]Change Text Color in MFC C++?

我想改變LVITEM的顏色嗎? m_szList是CListCtrl。

LVITEM lvItem;

    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = 0;
    lvItem.iSubItem = 0;
    lvItem.pszText = _T("Sandra");
    m_szList.InsertItem(&lvItem);
    m_szList.SetTextColor(RGB(255, 78, 12));

    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = 1;
    lvItem.iSubItem = 0;
    lvItem.pszText = _T("Roger");
    m_szList.InsertItem(&lvItem);

此代碼可以更改sandra和roger的顏色。 但我只想將sandra的顏色更改為紅色。 並設置為默認(黑色)。

您可以為此任務使用自定義繪圖列表控件。

您可以通過響應NM_CUSTOMDRAW消息來進行控件自定義繪制。 這是控件發送的通知消息。 使用MFC,您的函數標頭將如下所示:

void CCustomLvView::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)

要添加此處理程序,通常使用CListCtrl(或CListView)的Properties列表,如下所示:

在此處輸入圖片說明

這樣會創建一個處理程序,如下所示:

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

    *pResult = CDRF_DODEFAULT;
}

[如果有記憶,則還會有一個或兩個注釋。]

您需要在上面添加一些代碼來更改文本顏色,此順序如下:

void CCustomLV2View::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) {
    LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);

    *pResult = CDRF_DODEFAULT;

    switch (pNMCD->nmcd.dwDrawStage) {
        // this tells the control, before any painting begins, that we 
        // want to be notified just before any item in the control is drawn.
        case CDDS_PREPAINT:
            *pResult = CDRF_NOTIFYITEMDRAW;
            break;

        // This will be called before an item is drawn.
        // We check what item is being drawn, and set the text color appropriately
        case CDDS_ITEMPREPAINT:
            if (pNMCD->nmcd.dwItemSpec == 0)
                pNMCD->clrText = RGB(0, 0, 0);
            else
                pNMCD->clrText = RGB(255, 78, 12);
            break;
    }
}

現在,這將以黑色繪制第一個項目的文本,並以紅色陰影繪制所有后續項目。 if (pNMCD->nmcd.dwItemSpec == 0)選擇項目,而pNMCD->clrText = RGB...是設置文本顏色的原因。

還要注意,我對其生成的代碼進行了相當小的修改,因此我有一個LPNMLVCUSTOMDRAW而不是LPNMCUSTOMDRAW 這樣可以訪問傳遞給自定義繪圖處理程序的特定於ListView的字段。 否則,我們將無法訪問我們正在使用的某些字段。

暫無
暫無

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

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