Автор
|
Тема: Гадский статик контрол
|
Alvengo |
опубликован 10-11-2001 17:55 MSK
Написал наследника CStatic и внедрил его в диалог. Основное предназначение: перехват OnPaint и рисование внутри картинки. При вызове диалога рисует нормально, но когда изображение не влазит полностью и я прокручиваю его, цепляясь мышом, то статик начинает рисовать не только внутри себя, но и гадит на окружающие элементы 8( Т.е. почему-то не работает отсечение вывода за пределами окна. Проблема может быть решена, если внутри OnPaint вызвать InvalidateRect(NULL), но к сожалению это приводит к другому глюку, который тоже непремлем 8( Помогите, кто может!!!!
|
Kosha
|
опубликован 12-11-2001 01:30 MSK
Кинь код отсечения вывода за пределами окна. И, заодно, функции рисования. Скорее всего, где-то перемудрил |
Flex Ferrum
|
опубликован 12-11-2001 10:11 MSK
На сколько я помню, была такая фишка - контролы на диалоге разделяют контекст устройства с самим диалогом. По идее, им надо устанавливать флаг "OWN_DC"
|
Alvengo
|
опубликован 12-11-2001 14:36 MSK
Видимо это тот редкий случай, когда я не виноват. Скажем, если заменить всю муру, которая у меня в пейнте на:CRect rcClient; GetClientRect(&rcClient); // Вычисляем размер окна dcPaint.FillSolidRect(0, 0, rcClient.Width(), rcClient.Height(), RGB(255, 255, 255)); то все рано будет выход за границы при скроллинге!!! За выходные мне пришел в голову простой вывод - это не я рисую за пределами окна, а злая ScrollWindow(). В обычных окнах отсечение видимо работает автоматом и все ОК. И только в диалоге петрушка начинается! 8( Основной вопрос теперь: как задать окну в диалоге свойство отсекать? |
Flex Ferrum
|
опубликован 12-11-2001 15:51 MSK
А еще есть ScrollWindowEx, которая может решить твои проблемы:int ScrollWindowEx( HWND hWnd, // handle to window int dx, // horizontal scrolling int dy, // vertical scrolling CONST RECT *prcScroll, // client area CONST RECT *prcClip, // clipping rectangle HRGN hrgnUpdate, // handle to update region LPRECT prcUpdate, // invalidated region UINT flags // scrolling options ); |
Flex Ferrum
|
опубликован 12-11-2001 15:52 MSK
Кстати, если я правильно все понимаю, то попробуй воспользоваться edit-контролом с включенным флагом ReadOnly и выключенной границей. |
Alvengo
|
опубликован 12-11-2001 17:21 MSK
Орешек знаний тверд, но все же, мы не привыкли отступать...Уффф. Все гениально подтвердилось. Действительно гадила ScrollWindow(). А ScrollWindowEx() не понадобилась - оказалось достаточно в prcClip передавать не NULL, а самому запросить клиентрект... Edit с указанными стилями не помог - отсутствие отсечения общая беда всех контролов... В общем на этот раз выкрутились, но вопрос остался: как запретить контролу рисовать за пределами? Именно запретить, а не полагаться на его сознательность. Если кто знает - расскажите для общего развития... |
Flex Ferrum
|
опубликован 12-11-2001 17:49 MSK
Попробуй выставить диалогу стиль "Clip Children" |
Alvengo
|
опубликован 13-11-2001 12:58 MSK
Попробовал. Очень забавно. Статик по прежнему рисует где хочет, но зато внутренности группбоксов стали прозрачными... 8) |