[英]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.