Пользовательский рисунок Элементы списка не меняют цвет текста

Я пытаюсь реализовать пользовательский нарисованный список в 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");

и цвет текста элементов не меняется. Зачем?

1

Решение

Без перебора предыдущие вопросы Вы продолжаете отправлять новые с теми же проблемами.

В этом фрагменте кода нечего исправить, слишком много неправильных вещей.

Вы можете начать с рабочего образца Реализация WTL Lazy Grid, Пользовательские нарисованные элементы управления с использованием WTL и выяснить, как все работает.

  • вам не нужно создавать подкласс для пользовательского рисования
  • пользовательские уведомления об отрисовке приходят к родительскому элементу управления, а не к самому контролю — вы должны обрабатывать их прямо в родительском окне, или REFLECT_NOTIFICATIONS и в этом случае у вас есть возможность обрабатывать их на элементе управления (и имеет смысл подклассы)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]