Вивчення структури програми для Windows на основі класів бібліотеки MFC

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2006
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Інші
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „ Львівська політехніка “ Кафедра ІСМ  Звіт про виконання лабораторної роботи № 9 з курсу „Технології проектування програмних систем” на тему: «Вивчення структури програми для Windows на основі класів бібліотеки MFC» Львів-2006 Мета роботи: вивчення структури програми для Windows, побудованої на основі класів бібліотеки MFC як SDI-програма. Завдання для роботи Розробити базову SDI MFC-програму на мові С++ для Windows. Реалізувати ієрархію планіметричних фігур, здійснити їх вивід. Програма та результати її виконання #include "stdafx.h" #include "Lab9.h" #include "Lab9Doc.h" #include "Lab9View.h" #include "ChoiceDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif int choice=-1; ///////////////////////////////////////////////////////////////////////////// // CLab9View IMPLEMENT_DYNCREATE(CLab9View, CView) BEGIN_MESSAGE_MAP(CLab9View, CView) //{{AFX_MSG_MAP(CLab9View) ON_WM_LBUTTONDBLCLK() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLab9View construction/destruction CLab9View::CLab9View() { // TODO: add construction code here } CLab9View::~CLab9View() { } BOOL CLab9View::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CLab9View drawing void CLab9View::OnDraw(CDC* pDC) { CLab9Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); Lockable *shape; Point p1(10,10), p2(200,50), p3(50,200); switch (choice) { case 0: shape = new Triangle(p1,p2,p3); break; case 1: shape = new Rect(200,100); break; case 2: shape = new Square(200); break; case 3: shape = new Round(100); break; default: shape = NULL; } //draw code for native data if (shape) shape->OnDraw(pDC,10,10); if (shape) delete shape; } ///////////////////////////////////////////////////////////////////////////// // CLab9View printing BOOL CLab9View::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLab9View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLab9View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CLab9View diagnostics #ifdef _DEBUG void CLab9View::AssertValid() const { CView::AssertValid(); } void CLab9View::Dump(CDumpContext& dc) const { CView::Dump(dc); } CLab9Doc* CLab9View::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLab9Doc))); return (CLab9Doc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLab9View message handlers void CLab9View::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CChoiceDlg dlg; if(dlg.DoModal()==IDOK) choice = dlg.m_radio; Invalidate(); CView::OnLButtonDblClk(nFlags, point); } Текст програми файлу Lab9Doc.h: #if !defined(AFX_LAB9DOC_H__34F88DCF_2546_4559_98DF_188625F8B8AB__INCLUDED_) #define AFX_LAB9DOC_H__34F88DCF_2546_4559_98DF_188625F8B8AB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <math.h> #define Pi 3.14 class CLab9Doc : public CDocument { protected: // create from serialization only CLab9Doc(); DECLARE_DYNCREATE(CLab9Doc) // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CLab9Doc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementation public: virtual ~CLab9Doc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CLab9Doc) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; class Math { public: static int sqr(int exp) { return exp*exp; } static double sqr(double exp) { return exp*exp; } }; class Lockable // interface { public: virtual double calcArea(void) = 0; virtual double calcPerimetr(void) = 0; virtual void OnDraw(CDC *pDC, int x, int y) = 0; }; class Point { public: double x,y; Point(double _x=0, double _y=0) : x(_x), y(_y) {} }; class Triangle: public Lockable { private: double a, b, c; Point p1, p2, p3; public: Triangle(Point _p1, Point _p2, Point _p3) : p1(_p1), p2(_p2), p3(_p3) { a = sqrt(Math::sqr(p1.x-p2.x) + Math::sqr(p1.y-p2.y)); b = sqrt(Math::sqr(p2.x-p3.x) + Math::sqr(p2.y-p3.y)); c = sqrt(Math::sqr(p1.x-p3.x) + Math::sqr(p1.y-p3.y)); } double calcArea(void) { double p = calcPerimetr()/2; return sqrt(p*(p-a)*(p-b)*(p-c)); } double calcPerimetr(void) {return a+b+c;} void OnDraw(CDC *pDC, int x, int y) { pDC->MoveTo((int)p1.x+x,(int)p1.y+y); pDC->LineTo((int)p2.x+x,(int)p2.y+y); pDC->LineTo((int)p3.x+x,(int)p3.y+y); pDC->LineTo((int)p1.x+x,(int)p1.y+y); } }; class Rect: public Lockable { protected: double width; double height; public: Rect(double w=0, double h=0) : width(w), height(h) {} double calcArea(void) {return width*height;} double calcPerimetr(void) {return 2*(width+height);} virtual int isSquare() { if (width==height) return true; else return false; } virtual void OnDraw(CDC *pDC, int x, int y) { pDC->Rectangle(0+x,0+y,(int)width-1+x,(int)height-1+y); } }; class Square : public Rect { public: Square(double a) : Rect(a,a) {} virtual int isSquare() { return true; } virtual void OnDraw(CDC *pDC, int x, int y) { Rect::OnDraw(pDC, x, y); } }; class Round : public Lockable { private: double radius; public: Round(double r=0) : radius(r) {} double calcArea(void) {return Pi*radius*radius;} double calcPerimetr(void) {return 2*Pi*radius;} virtual void OnDraw(CDC *pDC, int x, int y) { pDC->Ellipse(x, y, (int)(x+radius+radius), (int)(y+radius+radius)); } };  Рис.1. Вигляд вікна програми після виконання  Рис.2. Вікно довідки  Рис.3. Вікно після виклику діалогового вікна Висновки Під час виконання лабораторної роботи я розробив базову SDI MFC-програму на мові С++ для Windows, реалізував ієрархію планіметричних фігур, здійснив їх вивід.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!