Автор работы: Пользователь скрыл имя, 26 Мая 2013 в 18:08, курсовая работа
Создать приложение, используя библиотеку объектов OWL, позволяющее:
выводить тригонометрические функции (синус, косинус, тангенс) в рабочее поле приложения
выбирать требуемый график из меню приложения
задавать необходимый масштаб
запрашивать информации о программе
стирать выбранные функции
использовать горячие клавиши для построения графиков, для выхода из программы и для вывода информационного табло
1.Техническое задание. 3
2. Краткие теоретические сведения 3
2.1. Структура OWL-программы 3
2.2. Вызов функций в Windows 4
2.3. Программирование на С++ 4
2.4. Общие положения программирования в среде Windows 4
2.5. Win16 и Win32 5
2.6. Графический интерфейс устройства 5
2.7. Цикл сообщений 5
2.8. Особенности Borland C++ 6
2.9. Функция Run() 7
3. Файлы, используемые при создании проекта. 8
4. Стандартные классы OWL. 8
4.1. Взаимодействие классов. 8
5. Стандартные функции классов OWL. 8
6. Пользовательские функции 8
7. Иерархия классов приложения. 9
8. Системные требования. 9
9. Размер файла. 9
10. Руководство пользователя. 10
11. Список использованной литературы: 14
12. Листинг программ. 15
В этой версии Borland C++ обращают на себя новый класс строк, динамическая организация типов(Run-Time Type Identification(RTTI)), классы шаблонов, новая библиотека STL(Standard Template Library(библиотека стандартных шаблонов)) и средства обработки исключительных ситуаций. Всеобъемлющая реализация языка в сочетании с современной 32-разрядной интегральной средой разработки и встроенным набором инструментов для работы с ресурсами(Resource Workshop) создали впечатляющее целое – Borland C++ 5.0
Для разработки приложений Windows широко используется среда IDE Borland C++ 5.0, в основном предназначенная для разработки 32-разрядных приложений, хотя можно создавать и 16-разрядные приложения.
Borland C++ поддерживает основные принципы объектно-ориентированного программирования: инкапсуляцию, полиморфизм и множественное наследование.
Инкапсуляция – совмещение данных и методов их обработки в одном объекте.
Полиморфизм – выполнение одного и того же метода по-разному для различных объектов.
Наследование – методы и данные одного класса могут передаваться другим классам, т.е. объекты могут наследовать свойства друг друга.
Основной задачей функции Run() можно считать последовательный вызов ряда других функций OWL, принадлежащих как классу TApplication, так и классу TWindow, что в итоге приводит к нормальному функционированию приложения. Последовательность этих вызовов с указанием классов, которым принадлежат вызываемые функции, приведена на рисунке 1 ниже.
Рис. 1 – Ход выполнения функции Run()
Как видно из рисунка 1, функция Run() последовательно вызывает три другие функции того же класса TApplication: InitApplication(), InitInstance() и MessageLoop().
Функция InitApplication(), вызываемая только для первого экземпляра приложения, фактически является функцией-заглушкой: сама по себе она не выполняет никакой полезной работы, однако ее можно заместить прикладной функцией с тем же именем и использовать, например, для запрещения запуска последующих экземпляров данного приложения. Основы такой методики будут рассмотрены ниже.
Функция InitInstance() вызывается как для первого, так и для всех остальных экземпляров приложения и выполняет целый ряд весьма важных действий. Прежде всего она вызывает функцию InitMainWindow(), которая создает объект класса TFrameWindow, определяющий характеристики главного окна, и вызывает функцию SetMainWindow(), которая объявляет новое окно главным. Именно на этом этапе можно изменить, например, расположение, размеры или стиль окна.
После создания объекта класса TFrameWindow, характеризующего новое окно, можно обращаться к функциям-членам этого класса. Функция InitInstance() это и делает, вызывая последовательно функции класса TWindowCreate() и ShowWindow(), выполняющие создание и показ нового окна. Эти действия реализуются путем вызова знакомых нам по части II этой книги функций "классического" интерфейса (API) Windows (CreateWindow() и ShowWindow()).
Образовав и выведя на экран главное окно приложения, функция Run() вызовом функции MessageLoop() входит в цикл обработки сообщений, в котором приложение и находится до своего завершения.
Файл проекта kursovay.ide служит для объединения всех файлов, входящих в приложение, в единый комплекс для создания выполняемого файла kursovay.exe.
Файл
проекта включает следующие
При
создании проекта приложения
использовались следующие
kursovay.cpp - файл с исходным текстом программы;
kursovay.rc - файл ресурсов;
kursovay.h – файл определения курсора и иконки окна;
default.def – файл определения модуля.
TApplication - класс приложения, содержит основные функции приложения: запуска, организации цикла обработки сообщений, обработку ошибок, сам производный от класса TModule.
TFrameWindow - класс окон с обрамлением,
производный от TWindow, используется для
конструирования главного окна. Окно TFrameWindow
может владеть окном-клиентом, которое
будет использоваться для визуальных изменений окна.
Одним из преимуществ так
называемого программирования, т.е.
программирование с помощью классов
OWL(Object Windows Library), является возможностью
использования такого мощного механизма
объектно-ориентированного программирования
как наследование, которое позволяет создать
сколько угодно объектов какого либо класса.
Замещать те методы класса, которые нас не устраивают. Наследование позволяет классу быть производным не от одного класса, а сразу от нескольких классов, наследуя все их методы и данные без излишней схожести классов.
Наследование в сочетании с огромным количеством классов, содержащих в OWL позволяет более быстро и качественно разрабатывать приложения, в отличие от процедурного, так называемого API-программирования.
SetIcon() - устанавливает пиктограмму приложения;
AssignMenu() - подсоединяет меню
к окну приложения;
MessageBox() - выводит окно сообщения;
Invalidate() - перерисовка главного
окна приложения;
SetTextColor() - устанавливаем цвет
текста;
TextOut() - выводит текст;
CloseWindow() - закрывает окно;
Paint() – предоставляет возможность обрабатывать сообщения WM_PAINT
InitMainWindow() – компонентная функция, создает объект класса TFrameWindow.
CmAbout()- функция вывода информации на экран
CmSin()-функция синуса
CmCos()-функция косинуса
CmTan()-функция тангенса
Cm200()-функция откликов на команды плавающего меню, масштаб 2
Cm100()-функция откликов на команды плавающего меню, масштаб 1
Cm50()-функция откликов на команды плавающего меню, масштаб 0.5
Рис.2 - Иерархия классов приложения
* 64 MB RAM
* CPU 80486 и выше
* Вся линейка Windows 9x и NT.
* Библиотеки OWL52f.dll, bwcc.dll, bds52f.dll, cw3230.dll
22 КБ
Рис.3 – Отображение иконки программы на рабочем столе.
Рис.4 – Окно программы построения тригонометрических функций.
Рис.5 – Выбор тригонометрических функций.
Рис.6 – График функции синус.
Рис.7 – График функции косинус.
Рис.8 – График функции тангенс.
Рис.9 – Удаление функции.
Рис.10 – Меню «Файл».
Рис.11 – «О программе».
Рис.12 – Изменение масштаба.
#include <owl\framewin.h>
#include " kursovay.h"
#include <math.h>
#include <owl\applicat.h>
#include <owl\dialog.h>
#include <owl\scroller.h>
#include <owl\edit.h>
#include <owl\dc.h>
#include <owl\validate.h>
#include <stdlib.h>
#include <owl\opensave.h>
struct
{
char unitsEdit[3];
char lineEdit[3];
char hRangeEdit[4];
char vRangeEdit[4];
} transBuf;
// Структура для сохранения данных изображения.
struct rec
{
int color;
int x;
int y;
};
/*Класс приложения, производный от Tappllication*/
class MyApp:public TApplication
{
public:
void InitMainWindow();//Замещаем функцию InitMainWindow
};
/*Класс главного окна, производный от TframeWindow*/
class MyWindow:public TFrameWindow{
protected:
rec recArray[100];
void Paint(TDC &dc, BOOL, TRect&);
void CmSetScroll();
void SetScroller();
double sine[1024],cosine[1024],tan[
bool sinIs,cosIs,tanIs;//
int k;//Масштаб по оси у
TMenu* menu;//Объявляем указатель на объект основного меню
TPopupMenu popupMenu;//Создаем объект плавающего меню
virtual void SetupWindow(); //Замещаем функцию TWindow.: SetupWindow ()
virtual void CleanupWindow() ; //Замещаем фукнцию TWindow::CleanupWindow ()
void Paint(TDC&,bool,TRect&);//
void CmAbout(); //Функции
void CmSin(); //откликов
void CmCos(); //на команды
void CmTan(); //основного меню Функции
void Cm200(); //откликов
void Cm100(); //на команды
void Cm50(); //плавающего меню
void EvRButtonDown(UINT,TPoint&);
public:
//TEditFile * notEdit;
MyWindow(TWindow*parent,const char far* title);//Конструктор
DECLARE_RESPONSE_TABLE(
};
DEFINE_RESPONSE_TABLE1(
EV_COMMAND(100,CmAbout), //Макросы
EV_COMMAND(201,CmSin), //для откликов
EV_COMMAND(202,CmCos), //на пункты
EV_COMMAND(203,CmTan), //основного меню
EV_COMMAND(CM_200,Cm200),
EV_COMMAND(CM_100,Cm100),
EV_COMMAND(CM_50,Cm50), //
EV_WM_RBUTTONDOWN,
END_RESPONSE_TABLE;//
MyWindow::MyWindow(TWindow *parent,const char far *title)
:TFrameWindow(parent, title)
{
AssignMenu("MainMenu");//
SetBkgndColor(RGB(255,255,255)
Attr.Style |= WS_VSCROLL | WS_HSCROLL;
Attr.X = 0;
Attr.Y = 0;
Attr.W = 800;
Attr.H = 600;
Attr.AccelTable = "MainMenu" ;
Scroller = new TScroller (this, 20, 20, 800, 600);
sinIs=false; cosIs=false; tanIs=false;//Начальные значения
//индикаторов
k=100; // Начальное значение масштаба
popupMenu.AppendMenu(MF_
popupMenu.AppendMenu(MF_
popupMenu.AppendMenu(MF_
}
/*3амещенная функция SetupWindow*/ void MyWindow::SetupWindow()
{
TWindow::SetupWindow();//
menu=new TMenu(HWindow);//Образуем объект класса TMenu
}
/*3амещенная функция CleanupWindow()*/ void MyWindow::CleanupWindow()
{
delete menu;//Удаляем созданный ранее объект меню
TWindow::CleanupWindow();//
}
/*Функции откликов на сообщения*/
void MyWindow::CmAbout()
{
MessageBox(" Построение графиков
стандартных
"\nфункций"
"\nНагель Кристина БИ 3-2, 2012 г. ","О программе", MB_ICONINFORMATION| MB_OK);
}
void MyWindow::CmSin()
{
int state=menu->GetMenuState(201,
if(state==MF_UNCHECKED){//
for(int i=0;i<1024;i++)//Образовать
sine[i]=sin((double)i/50);//
sinIs=true;//Установить
menu->CheckMenuItem(201,MF_
Invalidate();//Инициировать
} else{//Если этот пункт меню уже выбран
for(int i=0;i<1024;i++)//Очистить
sine[i]=0;//массив данных
sinIs=false;//Сбросить
menu->CheckMenuItem(201,MF_
Invalidate();//Перерисовать
}
}
void MyWindow::CmCos(){
int state=menu->GetMenuState(202,
if(state==MF_UNCHECKED){//
for(int i=0;i<1024;i++)//Образовать
cosine[i]=cos((double)i/50);//
cosIs=true;//Установить
menu->CheckMenuItem(202,MF_
Invalidate();//Инициировать
} else{//Если этот пункт меню уже выбран
for(int i=0;i<1024;i++)//Очистить
cosine[i]=0;//массив данных