Просмотр полной версии : Прорисовка окна
здравствуйте!
скажите пожалуйста как сделать, чтоб изоображения в окне представления перемещалась во время прокрутки (т.е. где мне перерисовывать )
Если ты работаешь с MFC, то для прокрутки окно вида должно наследоваться не от CView, а от CScrollView. Отрисовка, как и в обычном CView, производится в методе OnDraw()
Если ты работаешь с MFC, то для прокрутки окно вида должно наследоваться не от CView, а от CScrollView. Отрисовка, как и в обычном CView, производится в методе OnDraw()
У меня так и есть окно вида порожден от CScrollView прорисовку делаю в OnDraw, но в режиме Debug я когда я двигаю полосу прокрутки то программа в OnDraw не входит
Aram,
Может, на этот контрол надо что-нибудь вроде флага OWNERDRAW поставить? Наверняка не знаю, но во многих других типах контролов возможность установки такого флага имеется. (А, может, сейчас вот вообще какую-нибудь глупость сказал :))
Есть виндовые нотификации WM_HSCROLL и WM_VSCROLL, которые посылает паренту Scroll контрол. Именно их и нужно слушать. В случае MFC, думаю, эти нотификации превращаются в виртуальные функции, например OnHScroll, которые нужно перегружать и имплементировать у себя в классе.
BBB, ты и правда не в тему ляпнул.
Romeo, Все необходимые оконные сообщения в классе CScrollView уже перехвачены и обработаны, все необходимые виртуальные функции тоже имплементированы. Нужно только правильно всем этим воспользоваться. Скорее всего автор топика сам чего-то накосячил. Вот пример проекта, который я сам сделал. У меня всё работает.
BBB, ты и правда не в тему ляпнул.
Romeo, Все необходимые оконные сообщения в классе CScrollView уже перехвачены и обработаны, все необходимые виртуальные функции тоже имплементированы. Нужно только правильно всем этим воспользоваться. Скорее всего автор топика сам чего-то накосячил. Вот пример проекта, который я сам сделал. У меня всё работает.
Уважаемый WinMain Ваша программа прекрасно работает (в режиме Debug при прокрутки или изменении размера окна программа входит в OnDraw() ), но в моей программе при прокрутки или при изменении размера окна программа не входит в OnDraw()). Когда нажимаю на Print Preview то программа входит в OnDraw.
Я работаю компилятором Visual Studio 6.0. делаю следующее
В окне ClassView щелкаю на CScrollView, правым щелчком мыши выбираю «Add Virtual Function» затем в окне New Virtual Function выбираю OnDraw() затем нажимаю на кнопку Add and Edit.
ну вот, проблема локализована. значит во всём виноват, как обычно, программист, а не разработчик среды программирования :) осталось самое простое: внимательно сравнить ключевые места в работающем и в не работающем коде. что может быть проще? :)
Проблема решилась
Я удалил OnPaint() и программа уже входит в OnDraw(). Получается OnPaint() и OnDraw() одновременно нельзя использовать?
Но у меня осталась еще одна проблема: Мне нужно, чтоб при прокрутки начало координат тоже смещались т.е (Например первоначальное начало координат это когда горизонтальная полоса находится в крайнем левом положении а вертикальная в крайнем верхнем положении), когда я горизонтальную полосу прокрутки передвигаю на 10 мм мне нужно чтоб координаты видимой области тоже изменялись т.е. координаты нижнего левого угла стали (10, 0) . Еще один вопрос почему когда в OnInitialUpdate
я изменяю SetScrollSizes(MM_TEXT,Size); на SetScrollSizes(MM_LOENGLISH, Size); то текст не отображается.
Проблема решилась
Я удалил OnPaint() и программа уже входит в OnDraw(). Получается OnPaint() и OnDraw() одновременно нельзя использовать?
Попробуй в начало OnPaint засунуть CScrollView::OnPaint(параметры)
Совершенно верно. Посмотри имплементацию OnPaint базоваго класса и увидишь, что она вызывает OnDraw. Таким образом, если ты перегружаешь OnPaint в своём классе и не вызываешь там OnPaint базового класса, то OnDraw просто некому вызвать, вот и всё.
Powered by vBulletin® Version 4.0.2 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot