1157

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

Курсовая

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

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

Русский

2013-01-06

114.5 KB

50 чел.


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

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

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

с оценкой_______________

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

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

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

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

}


 

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

5555. Расчет ректификационных установок. Теплообмен и технологическая схема установки 1.25 MB
  Введение Одним из наиболее распространенных методов разделения жидких однородных смесей, состоящих из двух или большего числа компонентов, является перегонка (дистилляция и ректификация). Перегонка представляет собой процесс, включающий частичное ис...
5556. Анализ производительности труда механо-сборочного цеха №3 (цех 184) ФГУП ПО Уралвагонзавод и определение резервов ее повышения 349.5 KB
  Введение Одним из самых наглядных и объективных показателей, определяющих рациональность использования имеющихся на предприятии кадровых ресурсов, является производительность труда. Производительность труда измеряется количеством продукции, произвед...
5557. Спроектировать одноступенчатый горизонтальный цилиндрический косозубый редуктор и клиноременную передачу для привода к ленточному конвейеру 1.14 MB
  Задание на проектирование Спроектировать одноступенчатый горизонтальный цилиндрический косозубый редуктор и клиноременную передачу для привода к ленточному конвейеру. Мощность на ведомом валу: P=12кВт Частота вращения ведомого вала: n2=400м...
5558. Организационная структура ОАО ЭМСС. Товарооборот и технические характеристики предприятия 479.5 KB
  Данный отчет освещает следующие темы: организационная структура ОАО ЭМСС, а также основные виды товаров и услуг, которые предоставляются предприятием организационная структура и задачи отдела главного технолога использо...
5559. Расчет фундаментов мелкого заложения и свайных фундаментов по I и II группе предельных состояний 742.58 KB
  Аннотация Приведены примеры расчета фундаментов мелкого заложения и свайных фундаментов по I и II группе предельных состояний. Рассмотрены примеры конструирования свайных ростверков, ленточных и столбчатых фундаментов. Методические указания предназн...
5560. Неопределенность измерения и ее отражение в описании результатов 218 KB
  Неопределенность измерения и ее отражение в описании результатов История вопроса В 1978 г. наивысший мировой авторитет в метрологии - Международный комитет мер и весов (МКМВ) обратился к Международному бюро мер и весов (МБМВ) с просьбой рассмот...
5561. Проектирование основных узлов тележки мостового крана 309.5 KB
  Исходные данные: Грузоподъемность G=50 кН Скорость подъема груза VG=20 м/мин Высота подъема груза Н=5 м Скорость перемещения тележки v=25 м/мин ПВ=15% Режим работы - М2; Кратность полиспаста - 4...
5562. Понятие и значение контроля исполнения документов 96.5 KB
  Понятие и значение контроля исполнения документов. Контроль играет важную роль в системе документооборота. Контроль исполнения документов обеспечивает своевременное и качественное решение содержащихся в документе вопросов, охват всех контролируемых ...
5563. Бертольт Брехт. Жизнь и творчество 48.5 KB
  Бертольт Брехт После смерти Бертольта Брехта прошло немало лет. Предсказания недоброжелателей не оправдались: драматургия и поэзия Брехта не только не ушли в прошлое, но с каждым годом приобретают все большее число друзей. Идеи Брехта по-прежнему со...