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

}


 

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

28786. Выделите основные тенденции и противоречия развития российского государства и общества в первой половине 19в. 14.04 KB
  Главными особенностями развития России в 1й половине XIX века были: 1 рост удельного веса бюрократии гражданской военной и полицейской; 2 замедление экономического развития по сравнению с Европой как следствие тупикового пути крепостного права; 3 противоречие между экономической и политической отсталостью с одной стороны и мощным расцветом культуры и науки – с другой 4 начало идейного и духовного разрыва между монархией и формирующейся интеллигенцией.
28787. Общественная мысль и общественное движение в России в первой половине 19в (декабристы; западники и славянофилы) 20.16 KB
  Источником идей для многих декабристов служили сочинения французских просветителей в которых доказывалась необходимость политических реформ и управления государством на основании твердых и установленных законов а не воли монарха. С другой стороны огромную роль в формировании мировоззрения декабристов сыграла Отечественная война 1812 г. Организации декабристов возникли в 1816 г. Однако в условиях консервативной политики которую проводил Александр I в последние годы своего царствования в организациях декабристов произошел раскол.
28788. Какие предпосылки отмены крепостного права существовали в 50-гг 19в в России? Как готовилась и осуществлялась крестьянская реформа, каковы ее итоги 15.54 KB
  Интенсивное развитие капитотнй начало пром переворота в России В 185758 гг во всех губерниях были созданы двор комитеты кот должны были рассм вопрос о низвержении кр права. В России было отменено рабство крво получило личную свободу 2. рефма способствовала развитию кап отнй в России Негативные последствия: 1.
28789. Какое влияние реформы Александра II оказали на становление рыночных отношений и гражданского общества в России? Дайте характеристику основным направлениям реформирования страны 16.23 KB
  Александр 2 18551881 Предпосылки великих реформ: 1поражение России в Крымской войне 2несоответствие тупикового характера крепостного хозяйства новым потребностям экономического развития стран 3экономическое и военнотехническое отставание от Европы 4необходимость компенсации неудовлетворительного как для дворян так и для крестьян компромисса расширением их гражданина и политических прав Содержание Великих Реформ: 1стала отмена крепостного права 1861 Содержание крестьянской реформы: Крестьяне были освобождении от крепостной зависимости...
28790. Общественное движение 60-70х гг. Возникновение народничества. Почему либеральные реформы привели к радикализации общества 15.33 KB
  Почему либеральные реформы привели к радикализации общества Особенностями революционного движения в России этого периода получившего название народников были: 1 ставка на особый бескапиталистический путь России к социализму через крестьянскую общину вопреки учению К.В России в ходе этого восстания произошел разрыв между революционерами поддержавшими поляков и либералами ставшими на сторону правительства и считавшими что до демократической конституции России предстоит пройти подготовительный путь созревания общества.
28791. Каковы особенности развития рыночной экономики России на рубеже 19-20вв? Чем они порождались и в чем проявлялись? Значение деятельности С.Ю. Витте для модернизации страны 13.73 KB
  Витте для модернизации страны. Витте: Главными мероприятиями Витте в экономической области стали винная монополия 1894 и денежная реформа 1897 установившая золотое обращение рубля. В 19041905 годах Витте добился заключения Портемутского мирного договора с Японией.
28792. Каковы причины революции 1905 года? Опишите ее ход и основные события 15.62 KB
  Каковы причины революции 1905 года Опишите ее ход и основные события. Ход революции: 9 января 1905 года было расстреляно шествие рабочих Петербурга стремившихся подать прошение императору. Пиком революции стало восстание в Москве в декабре 1905 года. Итоги революции: Революция не решила в полном объеме поставленных перед ней проблем но заставило правительство пойти на некоторые уступки обществу.
28793. Октябрьский манифест 1905г. Начало парламентаризма в России 16.9 KB
  Был учреждён Парламент состоящий из Государственного Совета и Государственной Думы. Председателем I Думы стал кадет С. Впоследствии Ленин признал бойкот I Думы ошибкой так как революция в это время уже развивалась по нисходящей линии. Оно вопреки уже принятому решению Думы соглашалось только на добровольное отчуждение.
28794. Политическая деятельность П.А.Столыпина. Замысел и воплощение. Значение аграрной реформы 14.37 KB
  Значение аграрной реформы. Цели реформы: Социальноэкономические Завершить аграрный переворот свободную рабочую силу направить в промышленность. Результаты реформы: Рост посевных площадей по стране на 10.