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

 

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

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

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 104 105 106 107 108 109 < 110 > 111 112 113 114 115 116 .. 204 >> Следующая

DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // отладочная версия находится
//в файле MiniDrawView.срр inline CMiniDrawDcc* CMiniDrawView::GetDccument()
{ return (CMiniDrawDcc*)m_pDccument; } #endif
111111111111111111111111111111111111111111111111111111111111111 11 {{AFX_INSERT_LOCATION}}
// Visual С++ вставит дополнительные объявления // сразу перед предыдущей строкой
#endif
// !defined(
// AFX_MINIDRAWVIEW_H_11E8392C_999A_11D1_80FC_OOCOF6A83B7F_INCLUDEDJ
Листинг 11.8
// MiniDrawView.срр : реализация класса CMiniDrawView //
#include "stdafx.h" #include "MiniDraw.h"
#include "MiniDrawDcc.h" #include "MiniDrawView.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = _FILE_;
#endif
III/1111! 1111111111111111111111111111111 /111 /11! 1111111111 /1 /11 II Класс CMiniDrawView
IMPLEMENTEDYNCREATE(CMiniDrawView, CView)
BEGIN_MESSAGE_MAP(CMiniDrawView, CView)
//({AFX_MSG_MAP(CMiniDrawView)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP END_MESSAGE_MAP()
111111111111111111111111111111111111111111111111111111111111111 /I Конструктор/деструктор класса CMiniDrawView
CMiniDrawView::CMiniDrawView() (
// TODO: Здесь добавьте кед конструктора
m_Dragging = 0;
m_HCrcss = AfxGetApp ()->LcadStandardCurscr (IDC_CROSS);
// стили окна; // без указателя; // задать чисто // белый фен; // без значка
CMiniDrawView::-CMiniDrawView() { }
BOOL CMiniDrawView::PreCreateWindow(CREATESTRUCT& cs) {
// TODO: Здесь модифицируйте класс или стиль окна, // изменяя поля структуры es
m_ClassName = AfxRegisterWndClass (CS_HREDRAW | CSJVREDRAW, 0,
(HBRUSH)::GetStockObject (WHITE_BRUSH), 0) ;
cs.lpszClass = m_ClassName; return CView::PreCreateWindow(cs);
}
lllllllllllII Hill IIllllllllllllllllllllIII III II II IIIllllllllll II Отображение окна класса CMiniDrawView
void CMiniDrawView::OnDraw(CDC* pDC) {
CMiniDrawDcc* pDcc = GetDccuraent() ; ASSERT_VALID(pDcc);
// TODO: Здесь добавьте кед отображения собственных данных
int Index = pDcc->GetNumLines (); while (Index—)
pDcc->GetLine (Index)->Draw (pDC);
}
II II 111 II II I II 111111 II II1111 II 111 II I II 11111111111111 II 111 II 1111 II Диагностика класса CMiniDrawView
#ifdef _DEBUG
void CMiniDrawView::AssertValid() const {
CView::AssertValid();
}
void CMiniDrawView::Dump(CDumpContextS dc) const {
CView::Dump(dc);
)
CMiniDrawDcc* CMiniDrawView::GetDccument() // неотладочная версия
// является встроенной
}
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMiniDrawDcc))); return (CMiniDrawDcc*)m_pDccument;
iendif //_DEBUG
lilllllllllll/lllllllllllllllllllllllllllllllllllllllllll/lll/l II Обработчики сообщений класса CMiniDrawView
void CMiniDrawView:.-OnLButtcnDcwn(UINT nFlags, CPoint point) (
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
m_PcintOrigin = peint; m_Pcint01d = peint; SetCapture (); m_Dragging = 1;
RECT Rect;
GetClientRect (SRect); ClientToScreen (SRect); ::ClipCurscr (SRect);
CView::OnLButtcnDcwn(nFlags, peint);
)
void CMiniDrawView::OnMouseMove(UINT nFlags, CPcint peint) {
// TODO: Здесь добавьте собственный кед обработчика // и/или вызов стандартного обработчика
::SetCursor (m_HCross) ;
if (m_Dragging) {
CClientDC ClientDC (this); ClientDC.SetR0P2 (R2_NOT) ; ClientDC.McveTc (m_PcintOrigin) ; ClientDC.LineTc (m_Pcint01d); ClientDC.MoveTc (m_PcintOrigin); ClientDC.LineTo (point); m_Point01d = point; }
CView::OnMouseMove(nFlags, point);
)
void CMiniDrawView::OnLButtcnUp(UINT nFlags, CPcint point) {
// TODO: Здесь добавьте собственный кед обработчика // и/или вызов стандартного обработчика
if (m_Dragging)
}
(
m_Dragging = 0; ::ReleaseCapture (); ::ClipCurscr (NULL); CClientDC ClientDC (this); ClientDC.SetROP2 (R2_NOT) ; ClientDC.McveTc (m_PcintOrigin) ; ClientDC.LineTc (m_PcintOld); ClientDC.SetROP2 (R2_COPYPEN) ; ClientDC.MoveTo (m_PcintOrigin) ; ClientDC.LineTc (point);
CMiniDrawDcc* PDcc = GetDccument();
PDoc->AddLine (m_PcintOrigin.x, m_PcintOrigin.y, point.x, point.y);
}
CView::OnLButtonUp(nFlags, point);
}
Итоги
В этой главе вы узнали, как программировать выполнение главных задач класса документа: сохранение данных, обеспечение доступа к ним с помощью открытых функций-членов и обработка команд меню, непосредственно воздействующих на данные документа. Напомним некоторые основные положения.
• Если документ состоит из дискретных данных, наподобие графических фигур, необходимо определить класс для их хранения, отображения и выполнения других операций (например, класс CLine в программе MiniDraw).
• Класс документа может быть удобным хранилищем группы переменных или объектов внутри объекта, который является экземпляром одного из классов коллекций библиотеки MFC. Например, экземпляр MFC-класса СОЬАггау может хранить в структуре данных, подобной массиву, коллекцию указателей на объекты (которые должны принадлежать классу, порожденному прямо или косвенно от класса CObject). Используя шаблон MFC-класса CTypedPtrArray, можно легко получить класс СОЬАггау, предназначенный для работы с объектами специального класса. Примером такого объекта в программе MiniDraw может быть mLineArray. Этот объект хранит набор указателей класса CLine.
Предыдущая << 1 .. 104 105 106 107 108 109 < 110 > 111 112 113 114 115 116 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100