Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 125

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 119 120 121 122 123 124 < 125 > 126 127 128 129 130 131 .. 204 >> Следующая

Щ Untitled - MiniDiaw
Бе Edit Help
Вертикальная полоса прокрутки
Бегунок прокрутки
Горизонтальная полоса прокрутки
Рис. 13.1. Полосы прокрутки программы MiniDraw
Чтобы класс представления порождался от класса CScrollview, необходимо в исходных файлах MiniDrawView.h и MiniDrawView.cpp заменить все вхождения класса CView на CScrollview. В файле MiniDrawView.h таких вхождений должно быть одно, а в MiniDrawView.cpp — восемь.
Примечание
Здесь описано, как изменить существующую программу, чтобы класс представления порождался от CScrollview. При генерации новой программы можно сгенерировать класс представления от класса CScrollview с помощью мастера AppWizard. Для этого в диалоговом окне мастера (Step 6) выберите имя класса представления в списке вверху, а затем - класс CScrollview в списке Base class.
Преобразование координат
Рассмотрим более подробно способ поддержки прокрутки в классе CScrollview. Когда документ открывается впервые, левый верхний угол рисунка отображается в левом верхнем углу окна (как в предыдущей версии программы). Однако при прокрутке документа с помощью полосы прокрутки MFC корректирует значение атрибута, называемого началом области просмотра.
Начало области просмотра определяет положение текста или графики относительно окна. Обычно точка с координатами (0, 0) появляется в левом верхнем углу окна представления, а точка с координатами (50, 100) — на расстоянии 50 пикселей от левого края окна и 100 пикселей от его верхнего края. Если прокрутить документ вниз на 75 пикселей, то MFC скорректирует начало области просмотра так, что обе точки появятся в окне на более высоких позициях. Точка с координатами (0, 0) не будет видна (все, что выводится за пределы окна, отсекается, попросту — отбрасывается), а точка с координатами (50, 100) будет выведена на расстоянии 25 пикселей от верхней границы окна. На рис. 13.2 показано окно представления до и после прокрутки.
После того как MFC скорректирует начало области просмотра, функция OnDraw перерисует линии в окне представления, задавая те же координаты для каждой линии. Из-за изменения начала области просмотра линии будут выведены с учетом прокрутки. Привлекательность такой системы состоит в том, что не нужно модифицировать функцию OnDraw для работы с полосами прокрутки; операции прокрутки реализуются автоматически.
Координаты, заданные при рисовании объекта, называют логическими координатами. Фактические координаты объекта внутри окна называют координатами устройства. На рис. 13.3 показано их различие. Все координаты, передаваемые функциям рисования MFC (например, MoveTo и LineTo), — это логические координаты. Однако те из них, которые используются MFC (например, позиция указателя мыши, передаваемая обработчикам сообщений мыши), — координаты устройства. До момента добавления к программе средств прокрутки логические координаты совпадали с координатами устройства. Теперь же (после добавления средств прокрутки) необходимо внести изменения, позволяющие преобразовывать логические координаты в фактические и наоборот.
Необходимо преобразовать координаты указателя мыши, переданные обработчику сообщения мыши, из фактических в логические так, чтобы линии рисунка отображались правильно. Для этого добавьте в функцию OnLButtonDown в файле MiniDrawView.cpp следующий код, выделенный полужирным шрифтом.
void CMiniDrawView::OnLButtonDown(UINT nFlags, CPoint point) {
// TODO: Здесь добавьте собственный код обработчика /'/ и/или вызов стандартного обработчика
CClienfcDC ClientDC (this); OnPrepareDC (SClientDC); ClientDC.DPtoLP (fipoint);
m_PointOrigin = point; m_Point01d = point; SetCapture (); m_Dragging = 1;
// другие функции ...
До прокрутки:
штШШж
Начало области просмотра _,
Точка (0, 0) _
Untitled - MiniDraw
File Edit Help
HBO
100
Окно представления
SO
НІ
Рисунок
Начало области просмотра
Точка (0, 0) /
После прокрутки на 75 пикселей вниз: шш
¦
Ш Untitled - M.niDraw НВ ЕЗ
?їв ?dt Help

'so" J
Окно представления —J

Рисунок
Рис. 13.2. Окно представления до и после прокрутки
Начало области представления
100 і
! № Edit Help
Точка: логические координаты: 50,100 координаты устройства: 50, 25
Окно представления
ill
Рисунок
Рис. 13.3. Логические координаты в сравнении с координатами устройства (документ прокручен вниз на 75 пикселей)
Чтобы преобразовать координаты устройства в логические, необходимо использовать контекст устройства, который относится к данному окну. Вспомните: объект контекста устройства управляет выводом информации в окно, сохраняет атрибуты режима рисования и предоставляет функции для отображения текста или графики. Первый добавленный оператор создает объект контекста, относящийся к окну представления. Второй — вызывает функцию OnP repare DC класса CScrollview, корректирующую начало области просмотра на основании текущей позиции прокрученного рисунка. (Начало области просмотра — это один из атрибутов рисунка, сохраняемых в объекте контекста устройства.) Третий оператор вызывает функцию DPtoLP класса CClientDC, преобразующую координаты курсора, сохраненные в параметре point, из фактических в логические для объекта контекста по отношению к новому (установленному) началу области просмотра. Если координаты, хранящиеся в параметре point, преобразованы в логические, то их уже можно использовать для рисования линии.
Предыдущая << 1 .. 119 120 121 122 123 124 < 125 > 126 127 128 129 130 131 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100