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

}


 

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

34192. Инфляция: причины, формы и виды 24.41 KB
  Инфляция это снижение покупательной способности денег проявляющееся через относительно быстрый рост цен. Скрытая инфляция существует как правило в нерыноч ной экономике в которой цены и заработные платы контро лируются и определяются государством. Открытая инфляция проявляется в форме роста цен на товары и услуги. Бумажные деньги обесцениваются возни кает избыточная денежная масса не обеспеченная соот ветствующим количеством товаров и услуг.
34193. Безработица и ее виды. Норма безработицы 31.96 KB
  Норма безработицы. Причины безработицы падение темпов экономического роста технический прогресс структурная перестройка эконо мики инфляция демографическая политика государства. Основные формы безработицы фрикционная структур ная циклическая сезонная застойная. Для характеристики состояния безработицы использу ются различные показатели доля безработных в совокупной рабочей силе количество безработных средняя продолжи тельность безработицы доля длительно безработных в эконо мически активном населении и др.
34194. Взаимосвязь инфляции и безработицы 31.89 KB
  Взаимосвязь инфляции и безработицы Безработица социальноэкономическое явление когда часть активного населения не может применить свою рабочую силу. В условиях инфляции резко сокращаются инве стиции особенно долгосрочные что отрицательно сказывает ся на экономическом росте. Соотноше ние этих двух параметров в краткосрочном периоде описыва ется кривой Филлипса Доля безработных Кривая Филлипса показывает взаимное изменение уров ней безработицы и инфляции в экономике и означает что инф ляция высока при низкой безработице и низка при...
34195. Необходимость, сущность и направления государственного регулирования экономики 23.13 KB
  Необходимость сущность и направления государственного регулирования экономики. Необходимость и сущность государственного регулирования экономики Необходимость государственного вмешательства в экономику обусловлена теми недостатками и отрицательными явлениями которые развиваются в процессе функционирования свободной стихийной рыночной экономики. Необходимость государственного регулирования экономики сформировало важнейшую проблему развития большей части стран в том числе и России достижение общенационального равновесия страны....
34196. Финансовая политика государства. Государственный бюджет 20.68 KB
  Финансы денежные средства рассматриваемые в про цессе создания и движения; формируются в ходе производства распределения и перераспределения ВВП валового внутрен него продукта страны. Финансы страны совокупность фи нансов всех секторов экономики в их взаимодействии между собой и остальными странами мира. В современных условиях понятием ≪финансы≫ определяют всю систему эконо мических отношений связанную с образованием распределени ем и перераспределением денежных ресурсов. Условно можно выделить государственные финансы финансы...
34197. Налоговая система государства: цели, виды налогов, методы взимания 15.58 KB
  Налоговая система государства: цели виды налогов методы взимания В ст. Согласно Налоговому кодексу РФ под налогами понимают обязательный индивидуальный безвозмездный платеж: взимаемый с организаций и физических лиц в форме отчуждения принадлежащих им на праве собственности хозяйственного ведения или оперативного управления денежных средств в целях финансового обеспечения деятельности государства и или муниципальных образований. Совокупность налогов сборов пошлин и других обязательных платежей взимаемых в бюджет на условиях...
34198. Денежно-кредитное регулирование экономики 14.71 KB
  Понятие денежнокредитного регулирования Теории спроса и предложения денег равновесие на денежном рынке являются научной основой для проведения государством обоснованной взвешенной кредитноденежной политики направленной на стабилизацию экономического развития. Совокупность государственных мероприятий в области денежного обращения и кредита называется денежнокредитной политикой. Денежнокредитная политика представляет собой комплекс мероприятий в области денежного обращения и кредита направленных на регулирование экономического роста...
34199. Государство в переходный период в экономике России 15.78 KB
  Государственное регулирование одна из основных форм участия государства в экономической жизни состоящая в прямом или косвенном воздействии на распределение ресурсов и формирование пропорций. В настоящее время выделяют следующие формы экономического регулирования: 1 административное регулирование за счет использования лицензирования и квотирования контроля над ценами доходами валютным курсом а также других форм; 2 правовое регулирование на основе гражданского и хозяйственного законодательства путем установления системы норм и...
34200. Организм и среда 16.95 KB
  Область распространения живых существ на Земле образует особую оболочку называемую биосферой. Биосфера возникла с появлением на Земле живых существ: она занимает всю поверхность суши все водоёмы Земли океаны моря озёра реки проникает в атмосферу большинство организмов поднимается в воздух более чем на 50 70 м а споры бактерий и грибов заносятся на высоту до 22 км. Условия существования на земле очень разнообразны и определяются факторами как неорганического так и органического порядка. Все организмы на земле живут сообществами...