Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Добавление собственной отрисовки


Автор: xTr1m 9.8.2006, 21:50
Вот у меня есть вопрос. Предположим я хочу, чтобы отрисовка вида проходила стандартная, но если пользователь выделяет строчку, то выделение я сам хочу сделать (свое). Если какаой-нибудь механизм, позволяющий примерно следующее
Код

void CXXXView::OnPaint()
{
//////////////////////////
сделать стандартную отрисовку
/////////////////////////

if(flag&TVIS_SELECT)
//////////////
моя отрисовка
//////////////
}
 
Или же необходимо рисовать весь вид самому?

Автор: Earnest 10.8.2006, 06:10
Если CListCtrlView - это LISTVIEW, то с помощью CUSTOMDRAW. Только это не в OnPaint делается, а в обработчике WM_NOTIFY - NM_CUSTOMDRAW. Набери в MSDN NM_CUSTOMDRAW и почитай про ListView.

Автор: Coocky 11.8.2006, 14:17
Да можно и проще все. Воспользуйся поиском. Давным давно я прикреплял файл с перерисованым ListCtrl  через DrawItem() -там есть пояснения/
тебе лишь нужно будет определить флаг выделения, и закрасить итем нужным цветом..
Цитата(Earnest @  10.8.2006,  06:10 Найти цитируемый пост)
NM_CUSTOMDRAW

Для него это будет сложно.. Для его ситуации подйдет и DrawItem smile 

Автор: Earnest 11.8.2006, 15:35
Ну конечно, гораздо проще написать всю прорисовку, чем просто поменять цвет или кисть. smile 
CUSTOMDRAW Только с первого взгляда страшный, а на деле - работы гораздо меньше, чем при OWNERDRAW.

Автор: Coocky 11.8.2006, 15:51
Цитата(Earnest @  11.8.2006,  15:35 Найти цитируемый пост)
CUSTOMDRAW Только с первого взгляда страшный, а на деле - работы гораздо меньше, чем при OWNERDRAW. 

Конечно, конечно... smile 
Да запарится он с возвращаемыми флагами! Там же можно делать почти все. от строки, тескта, линий, до бекграунда и т.д.
Ему (для перерисовки строки с выделением) с головой хватит  DrawItem smile 
Там же все готово в параметрах , которая функция принимает и DC  и размер прямоугольника, номер строки и флаг состояния smile 
А в CUSTOMDRAW надо все самому, причем с двойной буфферизацией, с умением работать с графикой.
А судя по
Код

void CXXXView::OnPaint()
{
//////////////////////////
сделать стандартную отрисовку
/////////////////////////

if(flag&TVIS_SELECT)
//////////////
моя отрисовка
//////////////
}



сразу не получится smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)