на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка системних об’єктно-орієнтованих програм мовою С++ в середовищі Windows
p align="left">FINIT;

FLDE;//ST(6)

FLD D;//ST(5)

FLD A;//ST(4)

FLD B;//ST(3)

FLD C;//ST(2)

FLD X;//ST(1)

FLD Y;//ST(0)

FADD ST(0),ST(1);//Y=X

FMUL ST(0),ST(4);//Y=X*A

FXCH ST(5);//D=A*X

FADD ST(0),ST(1);//Y=X

FMUL ST(0),ST(3);//Y=X*B

FXCH ST(6);//E=X*B

FADD ST(0),ST(3);//Y=B

FMUL ST(0),ST(4);//Y=A*B

FADD ST(0),ST(5);//Y=A*X+A*B

FSUB ST(0),ST(6);//Y=A*X+A*B-B*X

FSTY; вивантажуємо ST(0) в Y

};

7. СТВОРЕННЯ ТА ПІДКЛЮЧЕННЯ БІБЛІОТЕКИ DLL

Бібліотеки DLL - це програмний код або дані, які динамічно доступні всім процесам операційної системи[5].

Динамічне завантаження DLL дозволяє програмі визначити, яка з бібліотек і коли буде завантажуватись, а також задати дію при невдалому завантаженні бібліотеки. Спочатку необхідно помістити модуль бібліотеки в пам'ять процесу. Дана операція виконується за допомогою функції LoadLibrary(), що має один аргумент - ім'я завантажуваного модуля.

HINSTANCE hDll;

hDll=::LoadLibrary("MandroDLL");

Опрацювання помилки завантаження DLL та повідомлення про помилку:

if (LoadLibrary("MandroDLL ") == NULL)

MessageBox("Cannot find or open file MandroDLL ");

Стандартним розширення ім'я бібліотеки вважається .dll, якщо не вказувати інше. Так як в імені файлу вказано лише його назву, то цей файл повинен знаходитись в одному каталозі з основним файлом типу *.exe. Для визначення адрес окремих функцій всередині бібліотеки використовується функція GetProcAddress():

FUN func;

func=(FUN)::GetProcAddress(hDll,"calc");

Для вивантаження бібліотеки з пам'ятті процесу використовується функція FreeLibrary().

Для створення самої бібліотеки DLL був створений новий проект типу Win32 Dynamic-Link Library та вибраний перемикач Simply DLL.

В результаті було автоматично створено файл, що містить функцію DllMain(), яка є одночасно і функцією входу, і функцією виходу:

BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

return TRUE;

}

Далі у файлі бібліотеки DLL описана експортована функція. Дана функція має повертати значення змінної «Y». Для цього слід функцію main() замінити на функцію, ім'я якої ми використовуємо для визначення адрес:

float Calc(float X)

Експортованій функції з головної програми передається операнди типу float.

Слід записати, що буде повернуто до основної програми:

return Y;

Ім'я експортованої функції потрібно вказати в окремому файлі визначень (файл типу *.def)[1]. Цей файл необхідно приєднати до проекту.

В текстовому редакторі в цьому файлі набрати текст файлу визначень:

LIBRARY "MandroDLL"

DESCRIPTION 'This library has one function'

EXPORTS

calc @1

У файлі визначень вказується ім'я експортованої функції та її номер, по якому функцію теж можна викликати[1].

Скомпільований файл необхідно скопіювати до каталогу, в якому знаходиться основна програма.

Лістинг бібліотеки наведено в Додатку Б.

8. ОСНОВНІ ОПЕРАЦІЇ НАД ФАЙЛАМИ

8.1 Відкриття файлу

Клас CFileDialog забезпечує створення і функціонування двох діалогових вікон, що використовуються для відкриття та збереження файлів[11].

Для відкриття файлу використовується конструктор класу:

CFileDialog dlgOpen(TRUE, "txt","", OFN_HIDEREADONLY, "Text file (*.txt)| *.txt| ALL Files(*.*)|*.*|", this); Діалогове вікно, що відкриває текстовий файл на рис. 14.

Рисунок 14 - Діалогове вікно «Открыть»

Для створення об'єкта Windows потрібно використати метод DoModal з наступним прототипом:

virtual int DoModal();

Цей метод повертає значення IDOK або IDCANCEL, в залежності від того, які кнопки були натиснуті при закриті діалогового вікна[4]. Коли файл відкривається на читання, його режим також повинен бути вказанним на читання:

CFile::modeRead|CFile::typeBinary);

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

dc.SetTextColor(RGB(255,0,0));

while(File.ReadString(m_Text))

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

OpenWnd -> UpdateWindow();

File.Close();

Завдяки функції file.ReadString(m_Text); відбувається зчитування файлу. dc.SetTextColor(RGB(255,0,0)); - вказує стиль, в якому буде виведено на екран текст. Діалогове вікно, що відображає вміст файлу з даними для обчислення на рис. 15.

Рисунок 15 - Діалогове вікно «Відкрити файл»

8.2 Збереження файлу

Якщо змінити в конструкторі класу TRUE на FALSE, то отримається конструктор класу для збереження файлу[11]:

CFile DialogDlgSave(FALSE,"txt","",OFN_HIDEREADONLY,"Text file (*.txt)|*.txt| All Files(*.*)|*.*|",this);

де OFN_HIDEREADONLY - знімає прапорець Read-Only;

OFN_CREATEPROMPT - дозволяє створення неіснуючих файлів.

Діалогове вікно, що зберігає результати виконання програми в текстовий файл на рис. 16.

Рисунок 16 - Діалогове вікно «Сохранить как»

Для запису даних використовується наступна конструкція:

CStdioFile file(DlgSaveAs.GetPathName(),

CFile::modeCreate|CFile::modeWrite);

Функція GetPathName()повертає ім'я вибраного файла та шлях. modeWrite- довзоляє створювати файл на запис.

В данній програмі відбувається збереження результату обчислення в тектсовому файлі. Це реалізується за допомогою:

CString string=”Результат обрахувань програми:";

string+=s;

File.WriteString(LPCSTR(string));

Завдяки функції File.WriteString(LPCSTR(string) відбувається запис до файлу.

Результати виконання програми зберігаються в текстовий файл, як показано на рис. 17.

Рисунок 17 - Діалогове вікно, що відображає вміст файлу

9. ВИВЕДЕННЯ РЕЗУЛЬТАТІВ ОБЧИСЛЕНЬ

9.1 Числове виведення результату

Числовий результат роботи програми виводиться у окремому вікні. Для цього був створений новий клас CTextWnd:

class CTextWnd:public CFrameWnd

public:

CTextWnd(CWnd *wnd);

Для створення нового вікна використовується метод Create:

CTextWnd::CTextWnd(CWnd *WndParent)

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

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

Власне виведення результату описане в функції OnResult ()(рисунок 18):

CClientDC DC(TextWnd);

DC.SetTextColor(RGB(13,66,6));

Виконуємо виведення результату за допомогою функції TextOut.

DC.TextOut(125,125,s,strlen(s));

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

9.2 Графічне виведення результату

Для всіх пристроїв графічного виведення використовуються одні і ті ж самі функції і класи, а вибір конкретного пристрою система виконує самостійно на основі інформації про контекст пристрою. Особливістю бібліотеки MFC є те, що вона містить спеціальні класи контекстів пристроїв. Базовим класом для всіх контекстів пристроїв є клас CDC. Існує також ще декілька класів контекстів пристроїв, що мають більш вузьку спеціалізацію. Я використовував CClientDC, що являє собою клас контексту пристрою для забезпечення доступу до клієнтської (робочої) області вікна. При створенні об'єкта цього класу в конструкторі викликається API-функція GetDC(), а при його знищенні в деструкторі - API-функція RealeaseDC()[7].

Для виведення результатів роботи програми у графічному вигляді було використано можливості векторної графіки.

В окремому вікні зображено знак “>” або “<” і цифра створена масивом точок “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\Main\Debug. Для її правильного функціонування необхідно, щоб у папці де знаходиться файл Mandro.exe також розміщувався файл MandroDLL.dl, що містить динамічно підключувану бібліотеку, яка використовується при роботі. Файл MandroDLL.dll знаходиться в папці ALEX_MANDRO\DLL\Debug.

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.