【发布时间】:2012-10-10 04:32:28
【问题描述】:
我正在尝试在 WTL 中实现自定义绘制的列表视图,这是列表视图的代码:
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 为 TRANSPARENT,则不会看到背景颜色。