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

 

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

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

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

тми
Еіів
*
Увеличение горизонтальных координат (в пикселях)
Увеличение вертикальных координат (в пикселях)
Т<1
ис. 13 4 Режим отобоажения ММ ТЕХТ
Примечание
Если щелкнуть кнопкой мыши на полосе прокрутки (но не на кнопке со стрелкой или бегунке), то окно представления прокручивается на одну страницу. По умолчанию страница равна 1/10 размера документа в направлении прокрутки. Если щелкнуть на кнопке со стрелкой, то окно представления прокручивается на одну строку. По умолчанию строка равна 1/10 страницы. Прокручиваемые расстояния можно настроить, передав требуемые размеры страницы и строки в третьем и четвертом параметрах функции SetScrollSizes (см. документацию по данной функции).
Совет
Если из функции OninitialUpdate вместо функции SetScrollSizes вызвать функцию CScrollView: : SetScaleToFitSize, то текст и графика в окне представления масштабируются таким образом, чтобы весь документ помещался внутри текущего окна представления. Поскольку такое масштабирование устраняет потребность в прокрутке, полосы прокрутки будут отсутствовать (см. документацию по данной функции).
Так как рисунок имеет определенный размер, в программу необходимо добавить средства, предотвращающие рисование линий вне области рисунка. (Если окно представления больше рисунка и за пределами рисунка нарисована линия, то прокрутка работает некорректно.) Сначала добавим в функцию OnDraw операторы, позволяющие при каждой перерисовке окна представления задавать внизу и справа ограничивающие линии, показанные пользователю границы рисунка. Добавьте строки, выделенные полужирным шрифтом, в функцию OnDraw в файл MiniDrawView.cpp.
11111 iii 1111111111111111111111111111111111111111111111111111111 /i Отображение окна класса CMiniDrawView void CMiniDrawView::OnDraw(CDC* pDC) {
CMiniDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: здесь добавьте код отображения собственных данных CSize ScrollSize = GetTotalSize (); pDC->MoveTo (ScrollSize.cx, 0) ; pDC->LineTo (ScrollSize.cx, ScrollSize.cy); pDC->LineTo (0, ScrollSize.cy);
int Index = PDoc->GetNumLines (); while (Index—) pDoc->GetLine (Index)->Draw (pDC);
)
В данном фрагменте программы функция GetTotalSize класса CScrollView возвращает объект класса csize с размерами рисунка, заданными при вызове функции SetScrollSizes. Затем эти размеры используются для отображения линий, ограничивающих рисунок справа и снизу.
Добавьте в обработчик сообщений OnLButtonDown операторы, предотвращающие размещение линий вне области рисунка. Для этого перепишите функцию OnLButtonDown в файле MiniDrawView.cpp (новые или измененные строки выделены полужирным шрифтом).
void CMiniDrawView::OnLButtonDown(UINT nFlags, CPoint point) {
// todo: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
CClientDC ClientDC (this); OnPrepareDC (&ClientDC); ClientDC.DPtoLP (Spoint);
// проверка нахождения указателя внутри области
// окна представления:
CSize ScrollSize = GetTotalSize () ;
CRect ScrollRect (0, 0, ScrollSize.cx, ScrollSize.cy); if (!ScrollRect.PtlnRect (point)) return;
// сохранение позиции указателя, Захват мыши и // установка флага перемещения:
m_PointOrigin = point; m_Point01d = point; SetCapture {); m_Dragging = 1;
// ограничение перемещений указателя мыши: ClientDC.LPtoDP (SScrollRect); CRect ViewRect; GetClientRect (CViewRect); CRect IntRect;
IntRect.IntersectRect (SScrollRect, SViewRect); ClientToScreen (filntRect); ::ClipCursor (&IntRect);
CScrollView::OnLButtonDown(nFlags, point);
)
Так как классу представления передается сообщение мыши, то ее указатель должен находиться внутри окна представления; при этом он может находиться вне области рисунка. Чтобы удостовериться в том, что указатель находится в области рисунка, определяется объект ScrollRect, являющийся экземпляром MFC-класса CRect, и ему присваиваются размеры рисунка, возвращаемые функцией GetTotalSize. Затем вызывается функция CRect:: PtlnRect для объекта ScrollRect и ей передаются координаты указателя. Функция PtlnRect возвращает значение true, если координаты указателя попадают в прямоугольную
область, сохраняемую в объекте ScrollRect. Если указатель находится за пределами рисунка, функция немедленно завершается.
Функция OnLButtonDown не только предотвращает начало рисования линии вне области рисунка, но и препятствует распространению линии за границы этой области. Следовательно, данная функция ограничивает перемещение указателя в окне представления областью рисунка. Иными словами, она ограничивает перемещение указателя областью пересечения рисунка и окна представления. (В предыдущей версии программы MiniDraw указатель перемещался внутри окна представления как угодно.) В добавленном фрагменте программы вызывается функция CDC: .-LPtoDP для преобразования логических координат рисунка, сохраняемых в объекте ScrollRect, в координаты устройства. Затем определяется объект viewRect класса CRect, которому присваиваются координаты окна представления, возвращаемые функцией GetClientRect. Далее определяется объект IntRect и вызывается функция CRect: : intersectRect для задания ему координат пересечения области рисунка и окна представления. Функция CWnd:: ClientToScreen преобразовывает значение IntRect в координаты экрана и передает их в функцию : :ClipCursor, что позволяет ограничить перемещение указателя. Области ограничения показаны на рис. 13.5.
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100