Отключить или заштриховать строки в функции Customdraw CListCtrl

У меня есть CListCtrl в диалоге MFC. Что мне нужно сделать, так это отключить некоторые элементы на основе условия, чтобы пользователь не мог выбрать это. До сих пор я менял цвет, но это не является правильным решением. Мой код выглядит так:

void CSomeDialog::OnCustomdrawElementList(NMHDR *pNMHDR, LRESULT *pResult)
{

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = 0;

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{

COLORREF crText;

//Here I want to do disable based on some condition of the data related to the item//
if ( (pLVCD->nmcd.dwItemSpec % 2) == 0 )
crText = RGB(255,0,0);
else if ( (pLVCD->nmcd.dwItemSpec % 2) == 1 )
crText = RGB(0,255,0);

// Storing the color back
pLVCD->clrText = crText;

*pResult = CDRF_DODEFAULT;
}
}

Я не могу найти ссылки на то, как отключить строку еще.

Другая проблема, даже после управления разделительной частью, как получить данные, относящиеся к элементу, здесь, в этой пользовательской функции рисования? Можно ли использовать pLVCD-> nmcd.lItemlParam для вызова GetItemData (). Пожалуйста помоги.

1

Решение

Рисование и отключение строки — это нечто другое.

Чтобы отключить строку, чтобы ее нельзя было выбрать, используйте LVN_ITEMCHANGING. Проверьте, меняется ли статус с невыбранного на выбранный (сравните uNewState и uOldState об изменении LVIS_SELECTED). Если вы не хотите разрешать выбор этого элемента, просто верните TRUE в сообщение WM_NOTIFY.

О том, чтобы связать данные с элементом в виде списка, легко использовать бесплатный LPARAM поле. Здесь вы можете хранить некоторые пользовательские данные, которые могут указывать на имеющуюся у вас внутреннюю структуру. Вы также можете получить доступ к этому полю в процедурах рисования.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector