Я пытаюсь реализовать пользовательский нарисованный список в 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");
и цвет текста элементов не меняется. Зачем?
Без перебора предыдущие вопросы Вы продолжаете отправлять новые с теми же проблемами.
В этом фрагменте кода нечего исправить, слишком много неправильных вещей.
Вы можете начать с рабочего образца Реализация WTL Lazy Grid, Пользовательские нарисованные элементы управления с использованием WTL и выяснить, как все работает.
REFLECT_NOTIFICATIONS
и в этом случае у вас есть возможность обрабатывать их на элементе управления (и имеет смысл подклассы)Других решений пока нет …