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


Автор: GavriKos 1.7.2009, 11:34
Есть такой вопрос. Нужно рисовать не на всем диалоге, а на контроле. Написал функцию, которая рисует то что надо, на кнопке (в качестве примера), беря его контекст устройства. Все хорошо, но вот только если вызвать эту фунцию из OnPaint то кнопка рисуется позже и оказывается над рисунком. Если повесить вызов ф-ии на нажатие кнопки, то все ок до очередного вызова перерисовки всего окна. Как можно решить данную проблемму?

Автор: Earnest 1.7.2009, 12:00
Сделать так, чтобы контрол рисовал себя сам. Т.е. субклассировать кнопку, переопределив ей функцию OnPaint. Или просто сделать ее OwnerDraw? и рисовать в функции DrawItem.

Автор: GavriKos 1.7.2009, 21:01
Ну вариант с субклассом (как я понял имеется ввиду наследование?) не сильно катит, ибо желательно рисовать только зная контекст устройства. По поводу DrawItem - чья это функция? А то включил OwnerDraw, но в обработчиках кнопки такого не нашел.

Автор: Andrey44 2.7.2009, 07:19
http://msdn.microsoft.com/en-us/library/bb775923(VS.85).aspx
http://msdn.microsoft.com/en-us/library/d07e6whh(VS.80).aspx

Автор: GavriKos 2.7.2009, 10:39
Спасибо, уже понятнее. Но возникла новая проблемма. В общем последовательность действий была такая

-нашел обработчик DrawItem, добавил его - все ок, программа собирается, запускаетя
-включил кнопке OwnerDraw - все, прогарамма собирается, но когда запускается то выдает ошибку Unhandled exception ((

Никакой код я при этом сам не вписывал. Все было сгенерировано визардами. Может надо какой то стиль поменять у кнопки еще? Увы, в мсдн-е нашел только упоминание, что в струтуре, передаваемой в OwnerDraw hDC должно быть в итоге такое же как и в начале, но я ведь ничего не меняю.

Автор: Earnest 2.7.2009, 20:13
Есть такая штука - отладчик называется. Попробуй, чего гадать-то.

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