1157

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

Курсовая

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

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

Русский

2013-01-06

114.5 KB

53 чел.


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

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

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

с оценкой_______________

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

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

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

Тема: «Программирование приложений для 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

}


 

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

53129. Внеклассное мероприятие по немецкому языку «Рождество в Германии» 1.31 MB
  Ведущий 1: Guten Tag, liebe Freunde! Heute feiern wir der hellste Tag - Weihnachten! Heute ist der schönste Tag im ganzen Jahr. Das ist der Weihnachtstag- Wie glänzt der Christbaum hell und klar. Wie freut sich die Kinderschar.
53130. Частини тіла (5 клас) 192.5 KB
  Heute beginnen wir ein neues Thema „Der Mensch“. Wir lernen, wie alle Körperteile heißen. Zuerst hört ihr ein Gedicht und sprecht nach.
53131. Федеративна Республіка Німеччина 70.5 KB
  Частина світу сторона світу країни карлики 25 держав колонізатори країни Західної Європи. Число Андрій Шевченко чудеса світу країни великий Велика сімка. Мотивація навчальної діяльності При знайомстві з регіоном Західної Європи ми зясували що країни цього регіону входять до числа розвинених країн світу а чотири з них Німеччина Італія Франція Великобританія члени Великої сімки. Інструктивна картка №1 Політологи фізико географи Загальні відомості про країну: назва; площа; форма правління; ...
53132. Свята в Німеччині та в Украіні 220.5 KB
  Guten Tag, liebe Kinder und liebe G?ste! Ich freue mich sehr, euch alle zu sehen und ich hoffe, dass ihr gute Zeit haben werdet. Feste und Br?uche spielen eine wichtige Rolle im Leben des Volkes. Und Deutsche haben Feiertage auch sehr gern. Der deutsche Dichter Joseph von Eichendorff hat?ber Feiertage ein Gedicht geschrieben...
53133. Leseverstehen. Das Märchen „Das Salz“ 52 KB
  Die dritte Tochter weinte und verließ ihren Vater. Aber bald sah man keine fröhlichen Menschen mehr. Brot ohne Salz, Fleisch ohne Salz, Gemüse ohne Salz -- das alles schmeckte den Menschen nicht. Sie hatten keinen Appetit mehr, sie wollten nicht mehr essen. Auch die Arbeit bereitete ihnen keine Freude mehr. Der König sah das alles. Das Essen schmeckte ihm auch nicht. Es gab kein Salz im Land mehr.
53135. Йоганн Вольфганг фон Гете – виразник ідей Просвітництва. Творчий і життєвий шлях письменника. Образ Фауста у літературі, музиці, малярстві 82.5 KB
  Liebe Freunde! Ich wünsche euch einen wunderschönen Guten Morgen und freue mich euch wiederzusehen. Wir werden heute über die Gestalt des Faust und den Unterstied dieser Gestalt im Werken von Goethe und Puschkin sprechen und wie diese Gestalt des Faust sich in der Musik und Malerei widergespiegelt hat.
53136. Гетьманщина наприкінці ХVІІ - у першій половині ХVІІІ ст 124.5 KB
  Підручники таблиця Іван Мазепа роздатковий матеріал. Мазепа біографія Дискусійний клуб Обери позицію: дати оцінку діяльності І. Мазепа історична постать неоднозначна таємничо загадкова і до цього часу. В літературних творах оспівано його образ...
53137. Гідросфера. Позакласний захід (КВК) з географії для 6 класу 40.5 KB
  ХІД ГРИ Ведучий: Сьогодні ми проводимо географічний КВК під час вивчення теми Гідросфера. Одиниця вимірювання солоності води проміле. На Дніпрі споруджено 6 великих водосховищ які створюють величезний запас води для більш посушливих південних і східних областей України. Значна кількість дніпровської води подається каналами і трубопроводами в південні і східні регіони України з постійним дефіцитом прісної води.