Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать скролинг в CView есть стандартные методы?  (Прочитано 22032 раз)
0 Пользователей и 1 Гость смотрят эту тему.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« : 19-08-2004 05:34 » 

Вообще CView наследует от CWnd но когда указываешь в стилях WS_HSCROLL и WS_VSCROLL то скролинга почему то не появляется
Если указать WS_HSCROLL в стиле родительского окна MainFrame то скролинг появляется но не там где нужно.
Неужели чтобы сделать скролинг в CView нужно создавать его вручную m_VScroll.Create(...) но тогда возникает другая проблема Если рисовать чтонибудь на этой форме то можно нарисовать на скролинге. Еще одна проблема при создании скролинга в CRect нужно указать его размер. Скролинг создаю в CView::OnCreate(
Получить же размер во время создания окна невозможно функция GetWindowRect возвращает не то что надо
Приходится обрабатывать OnSize и там устанавливать размер для скролеров.
Может есть способ попроще?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Pu
Большой босс

ru
Offline Offline
78


« Ответ #1 : 19-08-2004 06:03 » 

USBLexus, в моем случае CView наследуется от CScrollWindowImpl , я думаю в MFC есть аналог аля CScrollWnd. Тогда и проблем отпадет. Вот нашел - вместо класса CView пользуйте CScrollView.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #2 : 19-08-2004 07:24 » 

Цитата: Pu
USBLexus, в моем случае CView наследуется от CScrollWindowImpl , я думаю в MFC есть аналог аля CScrollWnd. Тогда и проблем отпадет. Вот нашел - вместо класса CView пользуйте CScrollView.

Да CScrollView действительно эту проблему здорово решает и все внутри себя грамотно обрабатывает. Но ксожалению он отпадает Пишу графический редактор где рисунок будет на обалденной длинны портянке В CScrollView эту портянку придется вгонять целиком и она сожрет всю память а я хочу прорисовывать изображение по мере появления его на экране на небольшом битмапе
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Pu
Большой босс

ru
Offline Offline
78


« Ответ #3 : 19-08-2004 07:59 » 

USBLexus, перепиши ему , я не знаю точно как это в МФЦ, у меня этот метод называется DoPaint(). Я в нем как раз отрисовываю битмап в размер клиентректа, соответствующий видимой области в момент скруллинга.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #4 : 19-08-2004 08:12 » 

Цитата: Pu
USBLexus, перепиши ему , я не знаю точно как это в МФЦ, у меня этот метод называется DoPaint(). Я в нем как раз отрисовываю битмап в размер клиентректа, соответствующий видимой области в момент скруллинга.


Да наверное... Другого выхода наверное нету...
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 19-08-2004 08:17 » 

USBLexus, может что знатоки МФЦ присоветуют, например Джон. Я просто с МФЦ стараюсь не связываться Улыбаюсь. Но принципы везде они и те же.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #6 : 19-08-2004 08:26 » 

А за что ты так МФЦ не любишь Если не секрет
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 19-08-2004 08:44 » 

USBLexus,  ДЕлай как Pu сказал, а для управеления скрололом есть соответствующие ф-ции. Те ты отрисовываешь только клиенсткую область, а скроллу говоришь  SetScrollSizes каких тебе размеров надо, и он показывает тебе что можно ещё на километр скроллить. Конечно в этом случае актуальную позицию придётся самому пересчитывать или запоминать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
xAL
Гость
« Ответ #8 : 19-08-2004 08:57 » 

Цитата
ишу графический редактор где рисунок будет на обалденной длинны портянке В CScrollView эту портянку придется вгонять целиком и она сожрет всю память а я хочу прорисовывать изображение по мере появления его на экране на небольшом битмапе


достаточно определить в классе представления OnDraw, в которой с помощью GetClientRect и GetScrollPosition можно определить что именно нужно отрисовать... и там уже отрисовывать нужную область.
Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #9 : 19-08-2004 09:04 » 

Цитата: xAL
Цитата
ишу графический редактор где рисунок будет на обалденной длинны портянке В CScrollView эту портянку придется вгонять целиком и она сожрет всю память а я хочу прорисовывать изображение по мере появления его на экране на небольшом битмапе


достаточно определить в классе представления OnDraw, в которой с помощью GetClientRect и GetScrollPosition можно определить что именно нужно отрисовать... и там уже отрисовывать нужную область.


Именно так я и делаю...
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Pu
Большой босс

ru
Offline Offline
78


« Ответ #10 : 19-08-2004 10:05 » new

USBLexus,  нет у меня никаких чувств к МФЦ. Просто у меня прога распространяется через инет и я стараюсь чтобы она была максимально компактной. На данный момент инсталяшка весит 800к. Я думаю что используя МФЦ для своего проекта я бы уже за 10М перелез. Есть в принципе еще кое какие вещи но не охота их здесь обсуждать. Просто предпочитаю и пользуюсь WTL, ATL, STL  и еще кое что из boost библиотек.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines