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

 

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

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

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

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Здесь добавьте собственный код обработчика // и/или вызов базового класса
return m_SplitterWnd.Create
(this, // родительское окно разделенного окна;
1, // максимальное число строк;
2, // максимальное число столбцов;
CSize (15, 15), // минимальный размер окна представления;
pContext); // информация о контексте устройства
}
При создании главного окна библиотека MFC вызывает виртуальную функцию OnCreateClient. Заданная по умолчанию версия этой функции, определенная в классе CFrameWnd, создает единственное окно представления, заполняющее область главного окна. Переопределенная версия этой функции вызывает функцию CSplitterWnd: :Create для объекта m_SplitterWnd, чтобы создать разделенное окно вместо окна представления. Разделенное окно содержит одну панель. Вторая панель создается при выполнении двойного щелчка на вешке разбивки.
Первый параметр, переданный функции Create, определяет родительское окно для разделенного окна. Параметр this делает последнее дочерним окном по отношению к главному.
Примечание
Разделенное окно яаляется дочерним по отношению к главному окну приложения. В свою очередь, каждая панель - дочернее окно разделенного окна.
Второй параметр определяет максимальное число разделительных панелей по вертикали. Значение 1 показывает, что пользователь не может делить окно горизонтальной разделительной линией (следовательно, вешка горизонтальной разбивки в окне не появится). Третий параметр определяет максимальное число разделительных панелей по горизонтали. Значение 2 показывает, что можно делить окно на левую и правую панель (рис. 13.7). Второму или третьему параметру
присваиваются только значения 1 или 2. Если присвоить 2 обоим этим параметрам, то можно будет разделить окно на четыре панели (попробуйте сделать это!).
Четвертый параметр задает минимальные горизонтальный и вертикальный размеры панели. Запрещается перемещать линию разбивки в позицию, уменьшающую размеры панели по горизонтали или вертикали. Пятый параметр содержит информацию о контексте устройства, переданную в функцию OnCreateClient.
Добавление средств разделения в новое приложение
В предыдущем параграфе средства разделения окна добавлялись в существующее приложение MFC. Чтобы добавить аналогичные средства в новую программу, используйте мастер AppWizard. Для этого в диалоговом окне мастера (Step 4) выполните следующие действия.
1. Щелкните на кнопке Advanced..., чтобы открыть диалоговое окно Advanced Options.
2. В диалоговом окне Advanced Options откройте вкладку WindowStyles для установки дополнительных опций главного окна приложения.
3. Установите опцию Use Split Window.
Теперь мастер AppWizard автоматически сгенерирует код, описанный в предыдущем параграфе. Параметры, передаваемые функции CSplitterWnd: :Create (в частности, второй, третий и четвертый), можно скорректировать вручную для изменения максимального количества окон представления и минимального размера такого окна.
Обновление окна представления
Каждая из панелей управляется отдельным объектом представления, т.е. отдельным экземпляром класса CMiniDrawView. MFC автоматически вызывает функцию CMiniDrawView::OnDraw для перерисовки панели при каждом изменении данных в окне (например, пользователь расширил окно или удалил перекрывающее окно).
Если нарисовать линию в одной панели, то другую панель также понадобится перерисовать для того, чтобы линия появилась в обоих окнах (при условии, что вторая панель прокручена к области рисунка, содержащей линию). Однако MFC не вызывает функцию OnDraw для второго объекта представления автоматически. После прорисовки линии в одном окне представления необходимо явно вызвать функцию CDocument: : UpdateAllviews для объекта документа, чтобы MFC вызвала OnDraw для другого представления. Добавьте следующее обращение к методу UpdateAllviews в конец подпрограммы, которая рисует линию, т.е. в функцию OnLButtonUp в файле Mini Draw View. срр.
void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point) {
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
if (m_Dragging) {
m_Dragging = 0; ::ReleaseCapture {); ::ClipCursor (NULL);
CClientDC ClientDC (this); OnPrepareDC (SClientDC); ClientDC.DPtoLP Upoint);
ClientDC.SetROP2 (R2_NOT); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (m_Point01d) ; ClientDC.SetR0P2 (R2_COPYPEN); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (point);
CMiniDrawDoc* PDoc = GetDocument ();
PDoc->AddLine (m_PointOrigin.x, m_PointOrigin.у, point.x, point.y);
PDoc->UpdataAllViews (this) ;
)
CScrollView::OnLButtonUp(nFlags, point); }
Функция UpdateAllviews вынуждает программу вызывать функцию OnDraw для всех связанных с документом представлений, кроме указанного в первом параметре. В программе MiniDraw передача параметра this в функцию UpdateAllviews вызывает функцию OnDraw только для другого представления. Текущее окно представления не нуждается в перерисовке, так как новая линия в нем уже отображается. Таким образом, если линия нарисована в одной панели, то она появится и в другой.
Предыдущая << 1 .. 123 124 125 126 127 128 < 129 > 130 131 132 133 134 135 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100