[英]Changing color of a specific character in an item in CListCtrl in MFC
我有一個CListCtrl,我需要從列表中每個單元格的文本更改A SPECIFIC字符/字符集(我通過比較選擇)的顏色。
當我找到字符/字符集時(通過使用'strstr'命令),我知道如何更改單元格整個文本的顏色,但我找不到一個顯示如何僅更改字符/集的示例的人物。
以下是我的代碼示例:
void Agenda::OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)pNMHDR;
*pResult = CDRF_DODEFAULT;
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
}else if ( (CDDS_SUBITEM | CDDS_ITEMPREPAINT) == pLVCD->nmcd.dwDrawStage )
{
// So right now I am in the stage where a SUBITEM is PREPAINTED
int nItem = pLVCD->nmcd.dwItemSpec;
int nSubItem = pLVCD->iSubItem;
char a[100];
listControl.GetItemText(nItem,nSubItem,a,100);
COLORREF textColorFound, textColorDefault;
textColorDefault = RGB(0,0,0);
pLVCD->clrText = textColorDefault;
char* startingFrom;
if( (startingFrom = strstr(a,filterText)) != NULL ) {
// Could I set a pointer here or something like that so
// the coloring could start only from 'startingFrom'
// and stop at 'strlen(filterText)' characters?
textColorFound = RGB(205,92,92);
pLVCD->clrText = textColorFound;
}
*pResult = CDRF_DODEFAULT;
}
}
不,你不能這樣做。 您需要做的是自定義相關文本。 這將是棘手的,因為你必須通過兩個不同的調用來完成它,在這兩個調用之間你必須手動調整顏色和繪圖位置以考慮字符間距等。你最好希望你不需要做多行輸出。
看一下使用 Michael Dunn在CodeProject上使用自定義繪制的列表控件中的文章,以獲得有關如何繼續的一些想法。
或者,如果您可以使用CodeJock的Toolkit Pro工具包,您可以利用他們的“XAML”支持(我使用引號,因為它不是真正的 XAML,而是他們自己實現的XAML 子集 )並讓他們完成所有艱苦的工作。
挖掘同一問題; 但是我不會修改/添加到繪制字符串的默認Windows行為......顯然這將是擁有它所有者繪制的終點。(aici am murit si eu :)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.