WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Гадский статик контрол

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Гадский статик контрол
Alvengo опубликован 10-11-2001 17:55 MSK   Click Here to See the Profile for Alvengo   Click Here to Email Alvengo  
Написал наследника CStatic и внедрил его в диалог. Основное предназначение: перехват OnPaint и рисование внутри картинки. При вызове диалога рисует нормально, но когда изображение не влазит полностью и я прокручиваю его, цепляясь мышом, то статик начинает рисовать не только внутри себя, но и гадит на окружающие элементы 8( Т.е. почему-то не работает отсечение вывода за пределами окна.
Проблема может быть решена, если внутри OnPaint вызвать InvalidateRect(NULL), но к сожалению это приводит к другому глюку, который тоже непремлем 8(
Помогите, кто может!!!!
Kosha опубликован 12-11-2001 01:30 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Кинь код отсечения вывода за пределами окна.
И, заодно, функции рисования.
Скорее всего, где-то перемудрил
Flex Ferrum опубликован 12-11-2001 10:11 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
На сколько я помню, была такая фишка - контролы на диалоге разделяют контекст устройства с самим диалогом. По идее, им надо устанавливать флаг "OWN_DC"
Alvengo опубликован 12-11-2001 14:36 MSK     Click Here to See the Profile for Alvengo  Click Here to Email Alvengo     
Видимо это тот редкий случай, когда я не виноват. Скажем, если заменить всю муру, которая у меня в пейнте на:

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     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А еще есть 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     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Кстати, если я правильно все понимаю, то попробуй воспользоваться edit-контролом с включенным флагом ReadOnly и выключенной границей.
Alvengo опубликован 12-11-2001 17:21 MSK     Click Here to See the Profile for Alvengo  Click Here to Email Alvengo     
Орешек знаний тверд, но все же, мы не привыкли отступать...

Уффф. Все гениально подтвердилось. Действительно гадила ScrollWindow(). А ScrollWindowEx() не понадобилась - оказалось достаточно в prcClip передавать не NULL, а самому запросить клиентрект...

Edit с указанными стилями не помог - отсутствие отсечения общая беда всех контролов...

В общем на этот раз выкрутились, но вопрос остался: как запретить контролу рисовать за пределами? Именно запретить, а не полагаться на его сознательность.
Если кто знает - расскажите для общего развития...

Flex Ferrum опубликован 12-11-2001 17:49 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Попробуй выставить диалогу стиль "Clip Children"
Alvengo опубликован 13-11-2001 12:58 MSK     Click Here to See the Profile for Alvengo  Click Here to Email Alvengo     
Попробовал. Очень забавно. Статик по прежнему рисует где хочет, но зато внутренности группбоксов стали прозрачными... 8)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.