1
我想實現在WTL自定義繪製的列表視圖,這是爲ListView代碼:自定義繪製列表視圖項不改變文字顏色
class CTaskListCtrl: public CWindowImpl<CTaskListCtrl, CListViewCtrl>,
public CCustomDraw<CTaskListCtrl>
{
public:
BOOL SubclassWindow(HWND hWnd)
{
ATLASSERT(m_hWnd==NULL);
ATLASSERT(::IsWindow(hWnd));
BOOL bRet = CWindowImpl<CTaskListCtrl, CListViewCtrl>::SubclassWindow(hWnd);
return bRet;
}
BEGIN_MSG_MAP(CTaskListCtrl)
CHAIN_MSG_MAP(CCustomDraw<CTaskListCtrl>)
END_MSG_MAP()
DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
{
return CDRF_NOTIFYITEMDRAW;
}
DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(lpNMCustomDraw);
COLORREF crText;
if ((pLVCD->nmcd.dwItemSpec % 2) == 0)
crText = RGB(200,200,255);
else
crText = RGB(255,255,255);
pLVCD->clrTextBk = crText;
return CDRF_DODEFAULT;
}
};
這是我如何使用它:IDC_LIST_TASKS是ListVieew我在資源嚮導中創建的資源。
CTaskListCtrl m_taskList;
m_taskList.SubclassWindow(GetDlgItem(IDC_LIST_TASKS));
m_taskList.AddColumn(TEXT("Name"),0);
m_taskList.SetColumnWidth(0,100);
m_taskList.AddColumn(TEXT("Algorithm"), 1);
m_taskList.SetColumnWidth(1,100);
m_taskList.AddColumn(TEXT("Status"), 2);
m_taskList.SetColumnWidth(2,100);
m_taskList.AddItem(0,0,L"ASDASD");
m_taskList.AddItem(0,1,L"ASDASD");
m_taskList.AddItem(0,2,L"ASDASD");
並且項目文本的顏色不變。爲什麼?
問題說「顏色的項目文本」,但代碼是設置文本背景顏色,而不是文本顏色。如果BkMode是透明的,則不會看到背景顏色。 –