Материал: Технол_разраб_прогр_обесп_Гагарина_Кокарева

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Этот код следует удалить в том случае, если вы вводите собственный код рисования. Указанные ниже координаты в точности соответствуют координатам, возвращаемым объектом CCntCntrltem, что создает эффект непосредственного редактирования.

удалите следующий код, если реализуете собственный код рисования.

if (m_pSelection NULL) {

POSITION pos pDoc-X3etStartPosition() m_pSelection (CCntCntrltem*) pDoc-XSetNextClientltern (pos); if (m_pSelection NULL)

m_pSelection->Draw(pDC, CRect(10, 10,210,210)); }

void CCntView::OnlnitialUpdate() CView::OnlnitialUpdate ();

Удалите следующий код, если реализуете собственный код инициализации.

m_pSelection NULL;

инициализация переменной, содержащей указатель на выделенный объект

// Печать документа

BOOL CCntView: :OnPreparePrinting (CPrintlnf о* plnfo) {

Стандартные действия по подготовке к печати return DoPreparePrinting (plnfo) ;

)

void CCntView:.-OnBeginPrinting (CDC* /*pDC*/, CPrintlnfo* /*plnfo*/) {

Добавьте код дополнительной инициализации перед печатью.

void CCntView::OnEndPrinting(CDC* /*pDC*/, CPrintlnfo*

/*plnfo*/)

{

Добавьте код очистки после печати.

}

void CCntView::OnDestroy() {

Деактивировать объект при удалении; это важно, если используется режим разделения окна просмотра.

CView::OnDestroy(); COleClientltem* pActiveltem GetDocument()->

GetlnPlaceActiveltem(this); if (pActiveltem NULL && pActive!tem-> GetActiveView() this) {

pActive!tem->DeactivateO; ASSERT(GetDocument()->

GetlnPlaceActiveltem(this) NULL);

}

}

// Поддержка OLE-клиентов

BOOL CCntView::IsSelected(const CObject* pDocItem)

const

{

// Представленная ниже реализация подходит, если // выделенными являются только объекты CCntCntrltem. // В противном случае данный код следует заменить. // Реализуйте функцию, которая проверяет тип // выделенного объекта.

return pDocItem m_pSelection; void CCntView::OnlnsertObject()

// Вызов стандартного диалогового окна InsertObject // для получения информации о новом объекте CCntCntrltem.

COlelnsertDialog dig;

if (dlg.DoModaK) IDOK) return;

BeginWaitCursor()

CCntCntrltem* pltem NULL;

TRY

Создаем новый объект, связанный с этим документом.

CCntDoc* pDoc GetDocument(); ASSERT_VALID(pDoc); pltem new CCntCntrltem(pDoc); ASSERT_VALID(pltem);

Инициализация объекта на основании данных, полученных из диалогового окна.

if (!dig.Createltem(pltem)) AfxThrowMemoryException() ;

Подойдет исключение любого типа

ASSERT_VALID(pltem);

Если объект был выбран из списка классов, а не загружен из файла, запускаем сервер для редактирования объекта,

if (dig.GetSelectionType() COlelnsertDialog::createNew!tern) pitem->DoVerb(OLEIVERB_SHOW, this); ASSERT_VALID(pltem);

// Последний введенный объект выделяется. // Введите код, соответствующий требованиям // вашего приложения.

m_pSelection pltem;

// Указатель устанавливается на // последний введенный объект

pDoc->UpdateAHViews (NULL) CATCH(CException, e) if (pltem NULL) ASSERT_VALID(pltem) p!tem->Delete() AfxMessageBox(IDP_FAILEDJTO_CREATE); END_CATCH EndWaitCursor(); >

// Следующий обработчик позволяет с помощью клавиатуры // прерывать сеанс непосредственного редактирования. // Инициируется это контейнером, а не сервером,

voidCCntView::OnCancelEditCntr()

Редактируемый объект закрывается.

COleClientltem* pActiveltem= GetDocument()-> GetlnPlaceActiveltem(this); if (pActiveltem NULL) pActive!tem->Close();

ASSERT(GetDocument()->GetInPlaceActiveItem(this)

NULL);

}

Обработчики OnSetFocusn OnSize требуются контейнеру в случае непосредственного редактирования объекта.

void CCntView: :OnSetFocus (CWnd* pOldWnd) {

COleClientltem* pActiveltem GetDocument ( GetlnPlaceActiveltem(this) if (pActiveltem NULL && pActive!tem->GetItemState () COleClientltem: :activeUIState)

Фокус необходимо установить на объект, если он находится в той же области просмотра.

CWnd* pWnd pActiveltem- >GetInPlaceWindow(

if (pWnd NULL)

{

pWnd->SetFocus( ) ; // метод SetFocus базового класса

// не вызывается return; }}

CView::OnSetFocus(pOldWnd); }

void CCntView: :OnSize (UINT nType, int ex, int cy) {

CView: :OnSize (nType, ex, cy)

COleClientltem* pActiveltem GetDocument

GetlnPlaceActiveltem(this) if (pActiveltem NULL)

pActiveItem->SetItemRects

}

Диагностика класса CcntView tifdef _DEBUG

void CCntView: .-AssertValid() const {

CView::AssertValid();

void CCntView::Dump(CDumpContext Sdc) const CView::Dump(dp); }

CCntDoc* CCntView::GetDocument() // отладочная версия

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLAS S

(CCntDoc))); return (CCntDoc*)m_pDocument; #endlf // DEBUG

Обработчики сообщений класса CCntView

Чтобы приложение могло отображать внедренные объекты, были внесены изменения в функцию ОпБга\у( ). Обратите внимание на такой фрагмент:

if (т_рЗе1ес^оп !=NULL)

m_pSeleotion->Draw(рОС, CRectdO, 10,210, 210)); }

По умолчанию объект размещается в окне приложения в заранее заданной области, которая определяется конструктором СКесЦ ). Указанные координаты можно изменить вручную.

В файл были также добавлены функции Оп1пШа1ирс1а1е(), ЬБексЛесЮ, ЫгаелО^есЛО, ОпСапсе!Ес1кСтг(), ОпЗегРосшОИ Оп81ге(). В частности, функция ОЫшеПОфес^) вызывает стандартное диалоговое окно класса С01е1п5еПЕИа1о§, предназначенное для вставки объектов.

5. Файл CNTRITEM.CPP

Файл CNTRJ.TEM.CPP, листинг которого приведен ниже, содержит реализацию класса ССтСпггкет.

Сг^гЗ^ет. срр: реализация класса ССг^Сг^гЗ^ет

#include "stdafx.h" #include "Cnt.h" #include "CntDoc.h" #include "CntView.h" #include "Cntrltem.h" #ifdef JDEBUG #define new DEBUG_NEW tundef THIS_FILE

static char THIS_FILE[] FILE

#endif

// CcntCntrltem

IMPLEMENT__SERIAL (CCntCntrltem, С01еС11еп^ет, 0) CCntCntrltem: CCntCntrltem (СО^Иос* рСс^а1пег) C01eClientltem (pContainer)

здесь добавьте код конструктора.

ССп^п^^ега: :-ССп^п^^ет здесь добавьте код очистки.

void CCntCntrltem::OnChange(OLE_NOTIFICATTON nCode, DWORD dwParam)

ASSERT_VALID(this) COleClientltem::0nChange(nCode, dwParam);

Редактируемому объекту посылается уведомление OnChange,свидетельствующее об изменении его состояния или внешнего вида. Обозначьте рабочую область объекта как недействительную путем вызова функции UpdateAllViews.

GetDocument()->UpdateAlIViews(NULL)

BOOL CCntCntrltem::OnChangeltemPosition(const CRect SrectPos)

ASSERT_VALID(this) ;

В процессе непосредственного редактирования данная функция вызывается сервером для изменения позиции окна редактирования.

По умолчанию вызывается метод базового класса, который, в свою очередь, задействует функцию COleClientltem::SetltemRects для перемещения объекта в новую позицию.

if (!COleClientltem::OnChangeltemPosition(rectPos)) return FALSE;

обновите всю кэшированную информацию, связанную с размерами объекта.

return TRUE; )

void CCntCntrltem::OnGetItemPosition(CRect SrPosition) ASSERT_VALID(this) ;

В процессе непосредственного редактирования данная функция позволяет определить координаты области, занимаемой объектом.

По умолчанию заданы фиксированные координаты. Запишите правильные координаты (в пикселях) в переменную гPos ition.

rPosition.SetRect(10, 10,210, 210);

void CCntCntrltem: :OnActivate()

Допускается только один сеанс редактирования в окне приложения.

CCntView* pView GetActiveView ASSERT_VALID(pView)

COleClientltem* pltem GetDocument ( )

GetlnPlaceActiveltem(pView) if (pltem NULL

ss-pltem this)

p!tem->Close ()

COleClientltem: OnAct ivate

}

void CCntCntrltem: :OnDeactivateUI (BOOL bUndoable) COleClientltem: :OnDeactivateUI (bUndoable)

Скрывает объект, если он был активизирован обычным способом

DWORDdwMisc 0;

m_lpObject->GetMiscStatus (GetDrawAspect SdwMisc)

if (dwMisc & OLEMISC*_INSIDEOUT) DoVerb (OLEIVERB_HIDE, NULL) }

void CCntCntrltem: Serialize (CArchive Sar) ASSERT_VALID(this)

Вызов функции базового класса для считывания данных, связанных с объектом COleClientltem. При этом инициализируется указатель m_j>Document, возвращаемый функцией CCntCntrltem: :GetDocument, поэтому функцию базового класса лучше вызывать вначале.

COleClientltem: Serialize (ar) ;

Теперь сериализуем данные, специфичные для объекта

CCntCntrltem.

if (ar.IsStoringO {

здесь добавьте код сохранения.

else{

здесь добавьте код загрузки.

//Диагностика класса CcntCntrltem #if<fef _DEBUG

void CCntCntrltem: :AssertValid const

COleClientltem::&ssertValidO;

}

void CCntCntrltem: :Dump(CDumpContext1 &dc) const

COleClientltem::Dump(dc);

#endif

Основное назначение этого файла состоит в отслеживании координат и размеров области, занимаемой внедренным объектом. Обратите внимание на фрагмент, выделенный полужирным шрифтом. Именно здесь задаются координаты, о которых говорилось при рассмотрении файла CNTVIEW.CPP.

Литература

  1. Иванова Г. С. Технология программирования. М.: Изд-во МГТУ им. Баумана, 2002.

  2. Вельбицкий И. В. Технология программирования. Киев, 1984.

  3. Грейди Буч, Джеймс Рамбо, Лйвар Джекобсон. UML руководство пользователя. М.: ДМ К, 2000.

А. Дин Леффингуэлл, Дон Уидриг. Принципы работы с требованиями к программному обеспечению. М.: Вильяме, 2002.

  1. Дэвид С. Платт. Знакомство с Microsoft .NET. М.: Русская редакция, 2001.

  2. Липаев В. В. Проектирование программных средств. М.: Высшая школа, 1990.

  3. Майерс Г. Искусство тестирования программ. М.: Финансы и статистика, 1982.

  4. Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы. СПб.: Символ-Плюс, 1999.

  5. Роберт Дж. Орберг. СОМ+ технология. Основы и программирование М.: Вильяме, 2000. 478 с.

  1. Е. Yourdon. Who Has the Right Stuff? // Software Development. 1997. № 9.

  2. Game, Weinberg. Exploring Requirements: Quality Before Design, 1989

  1. Аджиев В. II Открытые системы. 1998. № 1.

  2. Батенко Л. П. // Менеджмент и менеджер. 2003. № 3.

  3. Марио Аписелла // Computerworld. 2000. № 16—17.

15. Davis. Fifteen Principles of Software Engineering // IEEE
Software. 1994. Vol. 11. № 6. P. 94-101.

Xd.BoehmA. Spiral Model of Software Development and Enhancement // Computer. 1988. Vol. 21. № 5. P. 61-72.

17. Good-Enough Software // Application Development Strategies. 1996. № 1.

  1. Алистэр Коуберн, Лори Вильяме. Парное программирование: преимущества и недостатки.

  2. Cusumano М., Selby R. How Microsoft Builds Software // Communications of the ACM. 1997. Vol. 40. № 6. P. 53—61.

  3. Cusumano M., Selby R. Microsoft's Weaknesses in Software Development //American Programmer. 1997. Vol. 10. № 10.

  4. KnepperS., Ichbiah D. The Making Microsoft. Prima Publishing, 1993

  5. www.maxkir.com.

  6. http://www.martinfowler.com/articles/designDead.html.

  7. http://www.softportal.com/articles/item_txt.php?id=78 Кент Бек.

  8. http://ergl.rU/archive/cs/tp/01.htm#P4 Лекции ВМиК. Технология программирования.

  9. Ожегов С. И. Словарь русского языка. М.: Советская Энциклопедия, 1975.

  10. Советский энциклопедический словарь. М.: Советская Энциклопедия, 1979.

  11. Политехнический словарь / Гл. ред. акад. А. Ю. Ишлинский. 2-е изд. М.: Советская Энциклопедия, 1980.

  12. Терри Кватрани. Визуальное моделирование с помощью Rational Rose 2002 и UML. М.: Вильяме, 2003.

  13. http://www.zsksoft.ru/zsync-doc/usage/team-development.htm.

  14. VoasJ. The Software Quality Certification Triangle. Crosstalk, Nov. 1998. P 12-14.

  15. http://www.spc-consulting.ru/standart/cmm.htm.

  16. http://www.interface.ru/home.asp?artId=3987.

  17. http://www.intuit.ru/department/se/testing/.

  18. McCabe T. J., Butler Ch. W Design complexity measurement and testing Communications of the ACM. 32, 12 (Dec. 1989). P. 1415-1425.

  19. Макконнелл С. Совершенный код. СПб.: Питер, 2006.

  20. Жоголев Е. А. Введение в технологию программирования (конспект лекций). М.: ДИАЛОГ-МГУ, 1994.

  21. Уолш Б. Программирование на Бейсике. М.: Радио и связь, 1988.

  22. Каляное Г. Н. Консалтинг при автоматизации предприятий (подходы, методы, средства). М.: СИНТЕГ, 1997.

  23. Страуструп Б. Язык программирования С++. Киев: ДиаСофт, 1993.

  1. Модели и структуры данных / В. Д. Далека, А. С. Деревянко, О. Г. Кравец, Л. Е. Тимановская. Харьков: ХГПУ, 2000.

  1. ХъюзДж., Мичтом Дж. Структурный подход к программированию. М.: Мир, 1980. С. 29—71.

  2. Жоголев Е. А. Технологические основы модульного программирования // Программирование. 1980. № 2. С. 44—49.

  3. Holt R. С. Structure of Computer Programs: A Survey // Proceedings of the IEEE. 1975. 63(6). P. 879-893.

  4. Майерс Г. Надежность программного обеспечения. M.: Мир, 1980. С. 92-113.

  5. Зелковец М. Шоу А., ГэннонДж. Принципы разработки программного обеспечения. М.: Мир, 1982. С. 65—71.

  6. Дал У., Дейкстра Э., Хоор К. Структурное программирование. М.: Мир, 1975. С. 7-19.

  7. ЛеоненковА. В. Самоучитель UML. СПб.: BHV, 2006.

  8. Крачтен Ф. Rational Unified Process: введение: третье издание. Издательство Addison-Wesley Professional, 2003.

  9. Басе Л., Клементе П., Рик Кацман Р. Практическая архитектура программного обеспечения: второе издание. Addison Wesley, 2003.

  10. Object Management Group Inc. Спецификация унифицированного языка моделирования OMG версия 1.5. Документ номер 03-03-01. Март 2003.

  11. Мак-Говерн Джеймс и др. Практическое руководство по архитектуре корпораций. Prentice Hall, 2004.

  12. Вендров А. М. CASE-технологии. Современные методы и средства проектирования информационных систем. М.: Финансы и статистика, 1998.

  13. Пушников А. Ю. Введение в системы управления базами данных. Источник материала — Пушников А. Ю. Введение в системы управления базами данных. Часть 2. Нормальные формы отношений и транзакции: учеб. пособие. Изд-е Башкирского ун-та, 1999.

  14. Структурный анализ при разработке программного обеспечения систем реального времени / В. А. Матьяш, А. В. Никанд-ров, В. А. Путилов, А. Е. Федоров, В. В. Фильчаков. Апатиты: КФ ПетрГУ, 1997.

  15. http://se.math.spbu.ru/.

  16. Колдовский В. Разработка ПО: оценка результата // Компьютерное обозрение. 2006. 21 сент.

Источник: https://files.student-it.ru/previewfile/6671

Смотрите также:

Анализ финансовых результатов деятельности предприятия (на примере универсама монетка ООО «ЭЛЕМЕНТ ТРЕЙД»)
Белинский В.Г.. Общий взгляд на народную поэзию и ее значение. Русская народная поэзия
Взаимосвязь уровня распространенности среди населения Республики Хакасия геогельминтозов и обсемененностью почвы селитебных территорий яйцами гельминтов
Возведение одноэтажного производственного здания из сборного железобетона методом монтажа
ИГПЗС к экзамену
Инструменты макроэкономики
Криминологический анализ умышленных уничтожений или повреждений чужого имущества (по материалам Волгоградской области)
Методические подходы к оценке результативности и эффективности цифровизации
Модельные характеристики технико-тактической подготовленности сильнейших борцов мира
Некоторые тактические особенности проведения допроса представителя потерпевшего при расследовании мошенничества в сфере автострахования