Смекни!
smekni.com

Розробка системних обєктно-орієнтованих програм мовою С в середовищі Windows (стр. 4 из 5)

В окремому вікні зображено знак “>” або “<” і цифра створена масивом точок “4”, знак “>” або “<” залежить від вхідних даних. Також виводиться прямокутник розміри якого залежать від результату обрахувань. Вигляд вікна з графічним результатом зображено на рисунку 19.

CBrush brush,brush2,brush3;

pen.CreatePen( PS_SOLID, 5, RGB( 0, 0, 0));

brush.CreateHatchBrush(HS_DIAGCROSS, RGB( 0, 0, 255));

brush2.CreateSolidBrush(RGB( 255, 0, 0));

brush3.CreateSolidBrush(RGB( 0, 255, 0));

float m=atof(s);

DCS.SelectObject(&brush);

DCS.Rectangle(200-m,500-m,700+m,700);

DCS.SelectObject(&pen);

DCS.SelectObject( &brush3);

if(z<4)

DCS.Polygon(arr,6);

if(z>4)

{

arr[0].x=260;

arr[3].x=340;

DCS.Polygon(arr,6);

};

Елементи масиву, які є вершинами багатокутника формуються таким чином щоб чітко відображалась різниця між знаком “>” і “<” при введенні різних Х. На основі вищезазначеного масиву формують дані для побудови інших фігур.

Рисунок 19 – Діалогове вікно графічного виведення результату

10. КЕРІВНИЦТВО СИСТЕМНОГО ПРОГРАМІСТА

Комп’ютер, на якому працює програма, повинен мати наступні мінімальні конфігурації:

· Процесор Pentium 500 MHz або більше;

· Оперативну пам’ять не менше 256 МБ;

· Не менше 2 ГБ вільного місця на диску;

· ОС Windows ME/2000/XP;

· Монітор з розширенням 800 x 600 та кольоропередачею в 32 біт;

Програма викликається за рахунок запускання її виконуваного файлу Mandro.exe, що знаходить в папці ALEX_MANDRO&bsol;Main&bsol;Debug. Для її правильного функціонування необхідно, щоб у папці де знаходиться файл Mandro.exe також розміщувався файл MandroDLL.dl, що містить динамічно підключувану бібліотеку, яка використовується при роботі. Файл MandroDLL.dll знаходиться в папці ALEX_MANDRO&bsol;DLL&bsol;Debug.

Основними файлами для створення проекту є:

1. Файли для створення основної програми: код програми на С++ - Mandro.cpp; файл ресурсів - Mandro.RC; заготовочний файл для зв’язку з ресурсами – Resource.h і Mandro.sln – основний файл проекту, що містить посилання на необхідні об’єкти. Також до основного проекту потрібно добавити папку з ресурсами RES, що містить малюнки панелі інструментів, іконки програми(toolbar1.bmp, ICON1.ICO).

2. Файли для створення бібліотеки DLL: MandroDLL.sln - основний файл проекту; MandroDLL.cpp - код програми на С++ і Assembler; StdAfx.cpp – файл що підключає файл заголовків StdAfx.h; MandroDLL.def – файл визначень що містить ім’я експортованої функції;.


11. КЕРІВНИЦТВО ОПЕРАТОРА

Дана програма не вимагає попереднього установлення, для її запуску необхідно скопіювати в один каталог головний завантажувальний файл Mandro.exe, файл динамічно підключуваної бібліотеки MandroDLL.dll (рис. 20).

Вхідна інформація для обчислення потрапляє в програму з клавіатури: вона вводиться у призначеному для цього діалоговому вікні введення, що відкривається при натисканні кнопки «Input». Виведення інформації здійснюється у двох формах. Текстовий результат виводиться при натисненні пункту меню «Run», а графічний – «Result». Відомості про розробника виводяться при натиснені кнопки «About». При натиснені на пункт меню «Open», можна відкрити існуючий файл з даними до виконання, записаних у форматі «Х=[числові дані]». Якщо натиснути на пункт меню «Save» чи відповідну йому кнопку на панелі інструментів або комбінацією клавіш Ctrl+S, результати виконання будуть збережені у файл. Щоб вийти з програми необхідно вибрати пункт меню «Exit».

При роботі програми може виникнути таке повідомлення:

Cannot find or open file MandroDLL.dll –це повідомлення виникає при запуску обчислення функції у разі, коли не знайдено файл динамічної бібліотеки, якому передаються данні для обчислення.

Внаслідок виникнення критичної помилки слід перезавантажити головну програму Mandro.exe.

Рисунок 20 – Зовнішній вигляд основних файлів проекту


ВИСНОВКИ

У результаті виконання даної курсової роботи було створено програму на мові С++ та з використанням підпрограми на мові програмування Assembler. Основна програма містить системне меню, рядок стану, панель інструментів.

Виконується обчислення функції, що написана мовою програмування Assembler та під’єднана до основного проекту як динамічна бібліотека DLL.

Дані для обчислень в програмі вводяться в діалоговому вікні. Результат обчислень виводиться в окремих вікнах (вивід числового результату та графічного). Програма виконує стандартні операції “Open”, “Save”, “Exit”.

Виконуючи завдання курсової роботи я поглибив свої навички з написання системних об’єктно-орієнтованих програм, навчився створювати складні програми з допомогою бібліотек MFC пакету Microsoft Visual Studio 2008, засвоїв основні принципи створення системних програм для середовища Windows 98/XP, а також вивчив структуру і принцип роботи Windows 98/XP.


ЛІТЕРАТУРА

1.Семеренко В.П., Програмування мовами С та С++ в середовищі Windows.– Вінниця: ВДТУ, 2002 р. –128с.

2. Секунов Н.Ю. Самоучитель Visual C++. – СПб.: БХВ-Петербург , 2002. – 736 с.

3. Шеферд Джордж, Программирование на MicroSoft Visual C++/Пер. с англ, - М.: “Русская Редакція”, 2003.—928с.

4. Крупник А. К., Изучаем Ассемблер.– СПб.:Питер, 2004 г. –256с.

5. Поляков А.К., Брусенцев В.С., Методы и алгоритмы компьютерной графики в примерах на Visual C++.–СПб.:БХВ-Петербург, 2003 г. –560с.

6. Семеренко В.П., Програмування мовами С та С++ в середовищі Windows.– Вінниця: ВДТУ, 2002 р. –128с.

7. Герберт Шилдт. Полный справочник по С.–Київ:Вільямс, 2002г.– 365с.

8. Бурдаев О. В., Иванов М. А., Тетерин И. И.– Ассемблер в задачах защиты информации.–Москва:КУДИЦ-Образ, 2004 г.–320с.

9. Баженова І.Ю., Visual C++ 6.0 Уроки програмування.– Київ:Фоліо,1997. – 634с.

10. http://msdn.microsoft.com/ru-ru/vstudio/default.aspx

11. Lars Powers, Mike Snell, Microsoft Visual Studio 2008 Unleashed, USA, 2008 – 1536c.


ДОДАТОК А

// Mandro.cpp :Defines the class behaviors for the application.

#include <afxwin.h>

#include <afxext.h>

#include "Resource.h"

#include "string.h"

#include "resrc1.h"

CString T="";

char s[80];

//++++++++++++++++++++++++++++++++++++++

class CMyDialog:public CDialog

{

public:

CMyDialog(CWnd* pParent=NULL);

enum {IDD=IDD_DIALOG1};

CEdit edit1;

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

BOOL OnInitDialog();

afx_msg void OnOK();

afx_msg void OnCancel();

DECLARE_MESSAGE_MAP()

};

CMyDialog::CMyDialog(CWnd* pParent)

:CDialog(CMyDialog::IDD, pParent)

{}

void CMyDialog::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, ID_EDIT1, edit1);

}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)

ON_COMMAND(IDOK,OnOK)

ON_COMMAND(IDCANCEL,OnCancel)

END_MESSAGE_MAP();

void CMyDialog::OnOK()

{

char str[80];

T="";

edit1.GetWindowText(str,80);

for(int i=0;i<=strlen(str);i++)

T=T+str[i];

for(int i=0;i<80;i++)

CDialog::OnOK();

}

void CMyDialog::OnCancel()

{

CDialog::OnCancel();

}

BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

edit1.SetWindowText(CString("0"));

return TRUE;

}

//++++++++++++++++++++++++++++

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

//++++++++++++++++++++++++++++++

class CTextWnd:public CFrameWnd

{

public:

CTextWnd(CWnd *Wnd);

};

CTextWnd::CTextWnd(CWnd *WndParent)

{

CRect rect(200,200,500,500);

Create (NULL,"Текстовий результат",WS_OVERLAPPEDWINDOW,rect,WndParent,NULL);

};

class CGraphWnd:public CFrameWnd

{

public:

CGraphWnd(CWnd *Wnd);

};

CGraphWnd::CGraphWnd(CWnd *WndParent)

{

Create (NULL,"Графічний результат", WS_OVERLAPPEDWINDOW, rectDefault,WndParent,NULL);

};

class COpenWnd:public CFrameWnd

{

public:

COpenWnd(CWnd *wnd);

};

COpenWnd::COpenWnd(CWnd *wndParent)

{

CRect rect(300,420,600,620);

Create (NULL,"Відкрити файл",WS_OVERLAPPEDWINDOW,rect,wndParent,NULL);

}

//+++++++++++++++++++++++++++++++

class CMyFrameWin:public CFrameWnd

{

public:

CMyFrameWin();

CMenu PopupMenu;

protected:

CStatusBar m_wndStatusBar;

CToolBar m_wndToolBar;

HICON m_hIcon;

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnOpen();

afx_msg void OnSave();

afx_msg void OnInput();

afx_msg void OnRun();

afx_msg void OnResult();

afx_msg void OnExit();

afx_msg void OnAbout();

afx_msg void OnHelp();

afx_msg void OnRButtonDown(UINT nFlags, CPoint point);

DECLARE_MESSAGE_MAP();

};

BEGIN_MESSAGE_MAP(CMyFrameWin, CFrameWnd)

ON_WM_CREATE()

ON_COMMAND(ID_OPEN,OnOpen)

ON_COMMAND(ID_SAVE,OnSave)

ON_COMMAND(ID_EXIT,OnExit)

ON_COMMAND(ID_INPUT,OnInput)

ON_COMMAND(ID_RUN,OnRun)

ON_COMMAND(ID_RESULT,OnResult)

ON_COMMAND(ID_ABOUT,OnAbout)

ON_COMMAND(ID_HELP1,OnHelp)

ON_WM_RBUTTONDOWN()

END_MESSAGE_MAP();

static UINT indicators[] =

{

ID_SEPARATOR,

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

CMyFrameWin::CMyFrameWin()

{

Create(NULL,"Курсова робота ст гр 2КС-06 Мандро Олександра",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,

MAKEINTRESOURCE(IDR_MAINFRAME));

m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

SetIcon(m_hIcon, true);

this->LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME));

PopupMenu.LoadMenu(IDR_MENUPOPUP);

};

int CMyFrameWin::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD

| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS

| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failed to create toolbar&bsol;n");

return -1;

}

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failed to create status bar&bsol;n");

return -1;

}

return 0;

}

void CMyFrameWin::OnOpen()

{

CString Text;

CFileDialog dlgOpen(TRUE, "txt","", OFN_HIDEREADONLY, "Текстовий файл (*.txt)| *.txt| ALL Files(*.*)|*.*|", this);

if(dlgOpen.DoModal()==IDOK)

{

COpenWnd *OpenWnd=new COpenWnd(this);

OpenWnd -> ShowWindow(SW_SHOWNORMAL);

OpenWnd -> UpdateWindow();

CClientDC dc(OpenWnd);

dc.SetTextColor(RGB(45,52,52));

CStdioFile File(dlgOpen.GetPathName(), CFile::modeRead| CFile::typeBinary);

while(File.ReadString(Text))

{

dc.TextOut(10,0,Text,Text.GetLength());

if (Text[0]=='X')

{

int N=2;

while(N!=Text.GetLength())