1157

Программирование приложений для WINDOWS с использованием функций WinAPI

Курсовая

Информатика, кибернетика и программирование

Программирование на С++. Общие положения программирования в среде Windows. Создание приложений Windows с использованием OWL. Отличительные особенности Borland C++. Общие положения создания и обработки окон приложений. Решение проблемы корректного вывода.

Русский

2013-01-06

114.5 KB

49 чел.


МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ

Кафедра вычислительных машин, комплексов, систем и сетей

Курсовой проект защищен

с оценкой_______________

________________________
(подпись руководителя, дата)

Курсовой проект по дисциплине

«Операционные системы»

Тема: «Программирование приложений для WINDOWS с использованием функций WinAPI»

Работу выполнил
студент группы ЭВМ 2-1

Кузьменко П.С.

(Ф.И.О.)

(подпись, дата)

Руководитель: Черкасова Н. И.___

(степень, звание, Ф.И.О)

Москва-2012


Содержание:

1.Техническое задание

2.Краткие теоретические сведения

2.1Программирование на С++

2.2 Общие положения программирования в среде Windows

2.2.1. Основные положения

2.2.2. Содержимое оконного приложения

2.2.3. Создание приложений Windows с использованием OWL

2.3 Отличительные особенности Borland C++

4. Состав проекта

3.1 Файлы, используемые в проекте

3.2 Структура программы

4. Описание работы проекта

4.1. Общие положения создания и обработки окон приложений

4.2. Реализация вывода графиков

4.2.1. Проблема корректного вывода

4.2.2. Решение проблемы корректного вывода

5. Алгоритмы

5.1. Алгоритм функции вывода графика

6. Руководство пользователя

6.1. Требования к системе

6.2. Использование проекта

7. Исходные коды

7.1. KPS.cpp

7.2. kps.rh

7.3. kps.rc


  1.  Техническое задание

Создание приложения, выводящего в окне графики стандартных функций косинусов

  1.  Краткие теоретические сведения
    1.  Программирование на С++

В настоящее время язык С++ является ведущим языком программирования в различных средах и операционных системах. Программу на языке С++ можно написать и откомпилировать в таких операционных системах как MS DOS, WINDOWS, UNIX, MACINTOSH OS.

Язык С++ является наследником языка С, который так же используется в наши дни. Не смотря на множество добавлений в С++ по сравнению с С, в компиляторах С++ можно откомпилировать программу С, так как в С++ используются те же правила и функции, что и в языке С. Главным отличием между языками является то, что язык С – процедурный, а С++ - объектно-ориентированный, но так же может использоваться, как процедурный. Процедурное программирование – последовательный вызов команд-процедур обработки данных, а Объектно-ориентированное программирование (ООП) – взаимодействие объектов.

Для программирования под каждую ОС используются различные компиляторы и линкеры, в которых могут быть свои правила, однако, все компиляторы должны придерживаться общего стандарта С++ (в настоящее время используется стандарт С++09) – обычно версию стандарта, используемого компилятором, можно определить по году выпуска текущего компилятора.

Не смотря на то, что любое приложение с использованием языка С++ можно написать в текстовом редакторе и откомпилировать, этот метод очень трудный, особенно при работе с использованием системных ресурсов, окон, графики. Так же возникает проблема при использовании нескольких файлов, когда нужно постоянно переключатся между ними. Для упрощения жизни программистов были созданы IDE  (Integrated Development Environment — интегрированная среда разработки).

Не смотря на появление конкурирующих языков, таких как: JAVA, Python, C#, С++ не теряет популярности и продолжает использоваться.

2.2 Общие положения программирования в среде Windows

2.2.1. Основные положения

Программирование в WINDOWS сильно отличается от программирования в MS DOS. В отличии от DOS, где во время работы приложения нельзя использовать другие и программа выполняется последовательно (команда за командой), в WINDOWS кроме программы, написанной программистом работают все остальные, работавшие до запуска,  работает сама система, а так же могут быть запущены другие приложения (в том числе очередной экземпляр текущего приложения). Так как все приложения должны принимать что-либо от пользователя, а так же выводить какие-либо данные, и делать это не мешая друг другу (либо влиять друг на друга), было создано много механизмов. Программируя под WINDOWS необходимо учитывать все эти механизмы и понимать принцип их работы для достижения максимального быстродействия программы и устранения всех возможных ошибок, возможных при работе программы.

2.2.2. Содержимое оконного приложения

Приложение с использованием окна должно содержать по меньшей мере две функции: главной и функции обработки сообщений (оконной процедуры). Следует отметить, что вторая функция не вызывается из главной и из других функций вообще. Она является функцией обратного вызова и вызывается самой системой при возникновении различных событий.  

2.2.3. Создание приложений Windows с использованием OWL

Object Windows Library (OWL) — библиотека классов, разработанная фирмой Borland для создания оконных приложений на языках Си и Pascal. Данная библиотека использовалась во многих средствах программирования компании Borland, таких как Turbo Pascal for Windows, Borland Pascal, Borland C++, C++ Builder и других.

Библиотека значительно упрощает создание оконных приложений для Windows. Она избавляет программиста от надобности писать множество строчек описания каждого окна – вместо этого просто нужно унаследовать класс окна(TFrameWindow) и задать желаемые настройки.

Так же программисту, использующему OWL, не нужно писать и задавать функцию обработки сообщений – нужно только унаследовать класс приложения (TApplication).  

Все функции всех допустимых событий вызываются в обработчике сообщений внутри этого класса. Функции в основном классе являются пустыми. Для задания действий по возникновению событий – необходимо перегрузить соответствующую функцию класса окна.

2.3 Отличительные особенности Borland C++ 5

Borland C++ — среда программирования (IDE) на языках Си и C++ для DOS, Windows и Windows NT. Среда включает в себя удобные утилиты для редактирования ресурсов программы. Вместе с Borland C++ поставляется множество примеров приложений, в которых можно увидеть возможности среды разработки, а так же можно узнать как реализован каждый пример, так как предоставляются исходные коды.

Borland C++ поддерживает как свои библиотеки (OWL), так и сторонние (MFC). Так же среда

4. Состав проекта

3.1 Файлы, используемые в проекте

kps.ide – Файл проекта, хранящий  параметры приложения, включенные в проект файлы.

kps.cpp – Файл, содержащий код программы

kps.rc – Файл, содержащий описание и содержимое ресурсов.

kps.rh – Файл определения ресурсов.

3.2 Структура программы

Рисунок 1 - Общая структура программ

4. Описание работы проекта

4.1. Общие положения создания и обработки окон приложений

Программирование под Windows подразумевает использование окон. В данном курсовом проекте используется библиотека классов OWL,  которая самостоятельно осуществляет создание окна и обеспечивает вызов функций обработки событий, которые прописываются по желанию.

4.2. Реализация вывода графиков

4.2.1. Проблема корректного вывода

Проблема корректного вывода графиков заключается в том, что графики строятся по функциям, значения которых зависят от единиц, а иногда десятых долей аргументов. Если выводить графики по функциям – их практически невозможно будет видеть. Кроме того, в графических системах ось Y идет сверху вниз и график будет отражен.

4.2.2. Решение проблемы корректного вывода

Для корректного вывода графиков нужно растянуть результаты по экрану. Для этого изначально необходимы размеры экрана (screen_width, screen_height), а так же диапазон значений и аргументов, отображаемых на графике (x_min, x_max, y_min, y_max).

Путем вычисления размеров функции по обоим осям:

x_size = x_max-x_min;

y_size = y_max-y_min;

И дальнейшего деления на эти значения размеров экрана, можно получить размер одного деления на экране:

x_del= (screen_width)/x_size;

y_del= (screen_height)/y_size;

Так как диапозон может быть таким, что оси координат будут не по центру – необходимо вычислять положение осей, расчеты ведутся относительно минимальных значений диапазона:

y_center=screen_height- (-y_min*y_del) ;

x_center=-x_min * x_del;

При выводе графиков каждое значение и аргумент функции y=f(x) умножаются на коэффициенты x_del, y_del и к ним так же прибавляются значения положения осей координат.

5. Алгоритмы

5.1. Алгоритм функции вывода графика

Рисунок 2– Алгоритм функции вывода графиков, часть 1

Рисунок 3– Алгоритм функции вывода графиков, часть 2

6. Руководство пользователя

6.1. Требования к системе

Данный курсовой проект использует библиотеку классов OWL -  требуется наличие данной библиотеки в Windows.

Минимальные требования к характеристикам ЭВМ:

Процессор: Pentium с частотой 133 Мгц

Оперативная память: 32 мб

Место на жестком диске: 1 мб

6.2. Использование проекта

Проект представляет собой окно с графиком. График выводится вместе с осями координат, где помечены единичные отрезки. Так же на графике отмечены оси и нулевые координаты.

Рисунок 4 – Окно программы после запуска

С помощью меню Functions выбирается доступная функция:Cos(X)

7. Исходные коды

7.1. KPS.cpp

#include <owl\owlall.h>

#include <math.h>

#include "kps.rh"

int screen_width, screen_height, x_center, y_center;

double x, y, x_max, x_min, y_max, y_min, x_size, y_size, x_del, y_del, x_scr, y_scr;

double Func_Cos(double x)

{

return cos(x);

}

double (*func) (double x);

class TFr:public TFrameWindow

{

public:

TFr(TWindow* parent, const char far* title):TFrameWindow(parent, title)

{SetBkgndColor(COLOR_WINDOWFRAME+1);

screen_width=640; screen_height=480;

x_min = -10;

x_max = 10;

y_min = -10;

y_max = 10;

Attr.X=380; Attr.Y=200;

Attr.W=screen_width; Attr.H=screen_height;

x_size = x_max-x_min;

y_size = y_max-y_min;

x_del= (screen_width-20)/x_size;

y_del= (screen_height-20)/y_size;

y_center=screen_height-10 - (-y_min*y_del) ;

x_center=10 + (-x_min * x_del);

func = Func_Cos;

}

void MCos()

{

func = Func_Cos;

Invalidate();

}

void Move_Ords()

{

  x_size = x_max-x_min;

y_size = y_max-y_min;

x_del= (screen_width-20)/x_size;

y_del= (screen_height-20)/y_size;

y_center=screen_height-10 - (-y_min*y_del) ;

x_center=10 + (-x_min * x_del);

  Invalidate();

}

void Exits()

{

exit(0);

}

void About()

{

 TDialog(this, "ABOUT").Execute();

}

void Paint(TDC&,bool,TRect&);

DECLARE_RESPONSE_TABLE(TFr);

};

DEFINE_RESPONSE_TABLE1(TFr, TFrameWindow)

 EV_COMMAND(CM_EXIT, Exits),

 EV_COMMAND(CM_GRAPHICSITEM_COS, MCos),

 EV_COMMAND(CM_ABOUT, About),

END_RESPONSE_TABLE;

void TFr::Paint(TDC&dc,bool,TRect&)

{

dc.SetBkMode(TColor::LtGray);

//TBrush brush(TColor::Black,HS_BDIAGONAL);

//TRect rect(10,10,155,155);

//dc.FillRect(rect,brush);

dc.MoveTo(10,y_center);

dc.LineTo(screen_width-10,y_center);

dc.LineTo(screen_width-20,y_center+5);

dc.MoveTo(screen_width-10,y_center);

dc.LineTo(screen_width-20,y_center-5);

dc.TextOut(screen_width-30,y_center-20,"X");

dc.MoveTo(x_center,10);

dc.LineTo(x_center+5,20);

dc.MoveTo(x_center,10);

dc.LineTo(x_center-5,20);

dc.MoveTo(x_center,10);

dc.LineTo(x_center,screen_height-10);

dc.TextOut(x_center-20,20,"Y");

dc.TextOut(x_center+10,y_center+10,"0,0");

dc.MoveTo(0, 0);

dc.LineTo(screen_width,0);

dc.LineTo(screen_width,screen_height);

dc.LineTo(0,screen_height);

dc.LineTo(0,0);

for (x=0; x<screen_width-10-x_del; x+=x_del)

{

    x_scr=x+10;

    y_scr= (5 + y_center);

    dc.MoveTo(x_scr, y_scr);

    y_scr -=10;

    dc.LineTo(x_scr,y_scr);

}

for (y=y_del; y<=screen_height; y+=y_del)

{

    y_scr=y+10;

    x_scr= (5 + x_center);

    dc.MoveTo(x_scr, y_scr);

    x_scr -=10;

    dc.LineTo(x_scr,y_scr);

}

for (x=x_min; x<=x_max; x+=1/x_del)

{

    x_scr=(x*x_del) + x_center;

    y = -func(x) ;

    y_scr= ((y*y_del) + y_center);

    if (y_scr>screen_height-10) y_scr=screen_height-10;

    if (y_scr<10) y_scr=10;

    if (x==x_min || y_scr==10 || y_scr==screen_height-10)

       dc.MoveTo(x_scr, y_scr);

    else dc.LineTo(x_scr,y_scr);

}

}

class myclass: public TApplication

{

public:

myclass(const char far* title):TApplication(title){};

virtual void InitMainWindow();

};

void myclass::InitMainWindow()

{

MainWindow = new TFr(0,"Курсовой проект - Кузьменко П.С. ЭВМ 2-1");

//MainWindow -> SetCursor(this, IDC_CURSOR1);

MainWindow -> SetIcon(this, IDI_ICON1);

MainWindow -> SetIconSm(this, IDI_ICON1);

MainWindow -> AssignMenu( IDM_MENU1);

}

int OwlMain(int,char* *)

{

myclass app("");

return app.Run();

}

7.2. kps.rh

#define IDC_CURSOR1 1

#define IDI_ICON1 1

#define IDM_MENU1 1

#define CM_EXIT 101

#define CM_GRAPHICSITEM_COS 202

#define CM_ABOUT 401

7.3. kps.rc

#define IDM_MENU1 1

#define CM_ITEM1 18873

#define CM_ABOUT 11842

#define CM_FILEITEM1 18873

#define CM_MOVEITEM4 18874

#define CM_MOVEITEM3 18873

#define CM_POPUPITEM3 18873

#define CM_GRAPHICSITEM_SAVE 11852

#define CM_GRAPHICSITEM1_OPEN 11851

#define CM_GRAPHICSITEM_ABOUT 11850

#define CM_GRAPHICSITEM_HELP 11849

#define CM_GRAPHICSITEM_OTHER 11848

#define CM_GRAPHICSITEM_RED 11847

#define CM_GRAPHICSITEM_BLUE 11846

#define CM_GRAPHICSITEM_X2 11845

#define CM_GRAPHICSITEM_X 11844

#define CM_GRAPHICSITEM__COS 11843

#define CM_GRAPHICSITEM_SIN 11842

#define CM_GRAPHCOLOURITEM2 18876

#define CM_POPUPPASTE2 18875

#define CM_POPUPITEM2 18874

#define CM_GRAPHICSITEM1 18873

#define CM_POPUPITEM1 18873

#define IDI_ICON1 1

#define IDC_CURSOR1 1

IDC_CURSOR1 CURSOR

IDI_ICON1 ICON

IDM_MENU1 MENU

{

POPUP "File"

{

 MENUITEM "EXIT", 101

}

 POPUP "Functions"

{

 MENUITEM "Cos x", 202, INACTIVE

}

 MENUITEM "About", 401

}

ABOUT DIALOG 10, 23, 141, 70

STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "О программе"

FONT 8, "MS Sans Serif"

{

PUSHBUTTON "OK", IDOK, 46, 50, 48, 14, 0, 0

CTEXT "Курсовой проект", -1, 6, 6, 129, 9, WS_CHILD | WS_VISIBLE | SS_CENTER, 0

CTEXT "Кузьменко П.С.", -1, 6, 20, 129, 9, WS_CHILD | WS_VISIBLE | SS_CENTER, 0

CTEXT "Вывод графиков(cos(x))", -1, 6, 35, 129, 9, WS_CHILD | WS_VISIBLE | SS_CENTER, 0

}


 

А также другие работы, которые могут Вас заинтересовать

1136. Центрировка линз. методы измерения децентричности 224.5 KB
  Методы контроля децентричности. Контроль с помощью коллиматора и микроскопа. Схема контроля децентрировки линз в проходящем свете с помощью коллиматора и микроскопа. Контроль с помощью автоколлимационного микроскопа. Контроль деценрировки на автоколлимационном микроскопе А.А.Забелина.
1137. Миры штриховые для определения предела разрешения 143 KB
  Штриховая мира состоит из элементов с различным количеством штрихов одинаковой длины. Ширина штрихов каждой миры убывает от элемента №1 к элементу номер 25 по закону геометрической прогрессии со знаменателем. Число штрихов в каждой группе элементов миры.
1138. Определение цены деления микроскопа с окуляр-микрометром 44 KB
  Для определения цены деления микроскоп-микрометра применяют объект-микрометр (шкалу с ценой деления 0,01 мм). Перекрестие шкалы окулярного микрометра.
1139. Типовые контрольно-юстировочные приборы 75 KB
  Зрительные трубки. Диоптрийная трубка. Коллиматоры для проверки разрешающей силы и качества изображения. Широкоугольный коллиматор.
1140. Информационные системы и базы данных. Основные требования к СУБД. Основные функции и структура СУБД. 686.5 KB
  Создание пустой базы данных в среде СУБД Access 2003. Добавление полей связи. Концептуальная модель проектируемой базы данных.
1141. Средства среды Delphi и C++Builder для разработки приложений для БД 384.5 KB
  Изучение принципов работы с базами данных в С++ или Delphi. Применение визуальных и невизуальных компонент для организации доступа к базе данных.
1142. Создание базы данных Автосалона 282 KB
  Анализ информационных задач и круга пользователей системы. Определение требований к операционной обстановке. Выбор СУБД и других программных средств. Анализ информационных задач и круга пользователей системы. Преобразование ER–диаграммы в схему базы данных.
1143. Применение экранных форм для ввода и редактирования данных в зависимых связанных объектах базы данных 482 KB
  Приобретение навыков построения системы меню приложений баз данных при помощи средств разработки меню графического интерфейса пакета FoxPro.
1144. Зависимость электропроводности полупроводников от напряженности электрического поля 447.5 KB
  Исследование влияния сильных электрических полей на электропроводность материала варистора. Зависимость проводимости от внешнего электрического поля (экстраполяция по первым и последним четырем точкам).