![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| semion_p |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 14.6.2003 Репутация: нет Всего: нет |
Хотел спросить вашего совета. Необходимо организовать вертикальную прокрутку CWnd (увы, не получается корректно работать CScrollView без его привязки к конкретному документу). Пользовался CWnd::SetScrollInfo(…) и CWnd::ScrollWindow(…), но происходит смещение лишь клиентской области окна. Смещённая же его часть не восполняется новым (ранее невидимым) содержимым.
Приведу пример кода : MovesWnd.SetScrollRange(SB_VERT,0,500); MovesWnd.ScrollWindow(0,-80); Высота полной области рисования – 500, но высота клиентской области окна – лишь 400. Смещается лишь область окна, нижняя же его часть остаётся заполненной старым материалом, а не новым (ранее невидимым). Пробовал пользоваться вместо CWnd::SetScrollRange(…) методом CWnd::SetScrollInfo(…), но результат тот же. Как быть? И ещё. При малейшем перекрытии области окна OnPaint() сразу уничтожает смещение. Где бы его стоило обновлять? Быть может, где-нибудь в Интернете есть конкретные примеры, посвящённые этому вопросу? Заранее спасибо. |
|||
|
||||
| Myth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.6.2003 Репутация: нет Всего: нет |
Вообще то можно использовать CScrollView и без привязки документа а просто создовать его как CWnd, а лучше отнаследоваться от CScrollView.
|
|||
|
||||
| semion_p |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 14.6.2003 Репутация: нет Всего: нет |
Да, это было бы прекрасно, но, увы, во время закрытия окна вылезает runtime error, причём в недокументированном модуле (ассемблерные мнемоники). Одним словом, не знаешь где точка входа у данной ошибки (но понятно, что при деструкции CScrollView).
|
|||
|
||||
| RAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Уважаемый, semion_p, насколько я понял из описанной Вами картины, тут проблема с методом OnPaint(), который не учитывает прокрутки.
Вероятно, нижняя часть перерисовывается методом OnPaint, но так как этот метод не учитывает, что изображение смещено, он "лепит" туда то, что там было до смещения.
Причина та же. Вывод, если хотите, чтоб работало именно так, то надо переписать OnPaint. Скажу сразу, что это его значительно усложнит (сам писал такую вещь, когда не было другого выхода). Или же создать ещё одно окно внутри. |
||||
|
|||||
| semion_p |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 14.6.2003 Репутация: нет Всего: нет |
Большое спасибо. Покопаюсь ещё немного с CScrollView(а вдруг заработает?), и cтану переписовать OnPaint().
Это сообщение отредактировал(а) semion_p - 16.6.2003, 00:27 |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Ничего усложнять не надо, если используется SetViewportOrg/SetWindwOrg (что кстати в CScrollView уже сделано). Тогда в OnPaint можно просто рисовать вся сцену, не беспокоясь о том где сейчас скроллинг. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |