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

 

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

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

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

Примечание
Объект контекста устройства, передаваемый функции onDraw, уже имеет правильно установленное начало области просмотра, скорректированное для прокрученного рисунка. При создании собственного объекта контекста устройства его необходимо передать функции onPrepareDC для коррекции начала области просмотра.
Аналогично измените обработчики сообщений мыши onMouseMove и OnLButtonUp. Эти функции создают объект контекста устройства; следовательно, необходимо добавить обращения к функциям OnPrepareDC и DPtoLP. Позиции этих операторов в функции OnMouseMove таковы.
void CMiniDrawView::OnMouseMove(UINT nFlags, CPoint point) {
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
::SetCursor (m_HCross); if (m_Dragging) {
CClientDC ClientDC (this); OnPrepareDC (CClientDC); ClientDC.DPtoLP (SpOint);
ClientDC.SetR0P2 (R2_N0T); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (m_Point01d) ; ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (point); m_Point01d = point; }
CScrollView::OnMouseMove(nFlags, point);
}
Добавьте новые операторы в функцию OnLButtonOp.
void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point) {
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
if (m_Dragging) {
m_Dragging = 0;
::ReleaseCapture ();
::ClipCursor (NULL);
CClientDC ClientDC (this); OnPrepareDC (CClientDC); ClientDC.DPtoLP (Spoint);
ClientDC.SetROP2 (R2_NOT); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (m_Point01d); ClientDC.SetROP2 (R2_COPYPEN); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (point);
CMiniDrawDoc* PDoc = GetDocument();
PDoc->AddLine (m_PointOrigin.x, m_PointOrigin.у, point.x,
point.y);
}
CScrollView::OnLButtonUp(nFlags, point);
}
Ограничение размера рисунка
Если переместить бегунок прокрутки (см. рис. 13.1), то MFC-класс CScrollView обеспечит соответствующую прокрутку рисунка. Например, при перемещении бегунка вертикальной полосы вниз MFC прокручивает рисунок к нижней части. Аналогично, когда пользователь перемещает бегунок горизонтальной полосы прокрутки вправо, MFC прокручивает рисунок к правому краю. Следовательно, библиотеке MFC должна быть передана информация о размерах рисунка.
В этом параграфе в программу MiniDraw будут добавлены операторы, передающие MFC размеры рисунка, для чего переопределим виртуальную функцию OninitialUpdate в классе представления программы. Используйте мастер ClassWizard для создания минимального определения функции (см. параграф "Удаление данных документа" гл. 11). В диалоговом окне мастера откройте вкладку Message Map, выберите класс CMiniDrawView в списках Class Name и Object Ids, а затем выберите виртуальную функцию OninitialUpdate в списке Messages. Добавьте функцию, щелкните на кнопке Edit Code и введите следующий текст в определение функции в файле Mini Draw View, срр:
void CMiniDrawView::OninitialUpdate() (
CScrollView::OninitialUpdate();
// TODO: Здесь добавьте собственный обработчик // и/или вызов стандартного обработчика
SIZE Size = {640, 480}; SetScrollSizes (ММ_ТЕХТ, Size);
}
MFC вызывает виртуальную функцию OninitialUpdate класса представления непосредственно перед первым отображением документа в окне представления.
Функция SetScrollSizes класса CScrollView сообщает MFC размер рисунка. Горизонтальные и вертикальные размеры рисунка записываются в структуру size, передаваемую во втором параметре. В текущей версии программы MiniDraw размер рисунка установлен постоянным: 640 пикселей в ширину и 480 — в высоту. Это сделано для того, чтобы рисунок имел те же размеры, что и экран Windows в стандартном режиме VGA.
Совет
Полнофункциональная программа рисования обычно позволяет задавать размер каждого нового рисунка. Это особенно важно при печати, так как позволяет в процессе создания рисунка учитывать размер страницы, на которой он будет напечатан. Размер рисунка сохраняется классом документа, а при сохранении рисунка в файле его размеры сохраняются вместе с другими данными рисунка.
Примечание
В программе М1пГОга\м размер документа постоянен, следовательно, определяется только один раз. Если приложение изменяет размер документа (например, при вводе или удалении данных), то вызывается функция Зе13сго1131гез. Лучше всего это сделать внутри функции Опирс^е класса представления, вызываемой при каждом изменении данных в документе (см. далее в параграфе "Эффективная перерисовка''). Использование этой методики рассмотрено в параграфе "Поддержка средств прокрутки'' гл. 18.
Первый параметр, переданный функции ЗегЗсгоИ^геэ, задает режим отображения — атрибут рисунка, сохраняемый объектом контекста устройства. Режим отображения определяет систему координат и единицы измерения, используемые для вывода текста и графики. Программа М1пЮга\у (как и другие программы в данной книге) использует режим отображения ММ_ТЕХТ, в котором все единицы заданы в пикселях, горизонтальные координаты увеличиваются в направлении вправо, а вертикальные - вниз (рис. 13.4). В гл. 19 кратко описаны другие режимы отображения.
Предыдущая << 1 .. 120 121 122 123 124 125 < 126 > 127 128 129 130 131 132 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100