КГ_6глава (Компьютерная графика)

2017-07-12СтудИзба

Описание файла

Файл "КГ_6глава" внутри архива находится в папке "Компьютерная графика". Документ из архива "Компьютерная графика", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 4 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "компьютерная графика" в общих файлах.

Онлайн просмотр документа "КГ_6глава"

Текст из документа "КГ_6глава"

ГЛАВА 6

Разработка графических программ для Windows

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

Мы будем использовать язык программирования C++, а если говорить точ­нее, то преимущественно обычный С. Везде, где это возможно, будем обхо­диться простыми языковыми средствами. Такие элементы C++, как классы, будем использовать только там, где они действительно необходимы, и где без них трудно обойтись. Не следует считать это отказом от современных технологий, например, от объектно-ориентированного и компонентного про­граммирования, визуальной технологии разработки программ. Я с большим уважением отношусь к этим действительно эффективным технологиям, но здесь они практически бесполезны (во всяком случае, последние две).

Для того чтобы сосредоточиться на особенностях программирования именно графики, при написании наших учебных программ мы не будем отвлекаться на другие аспекты программирования (например, разработку пользователь­ского интерфейса). Такое упрощение, как представляется, позволит деталь­нее ознакомиться с компьютерной графикой изнутри. Если не знать графику, то компоненты и визуальное программирование не помогут. Последнее ут­верждение может показаться явно спорным, однако, по-моему, это именно так — не следует писать программы, не понимая сути того, что программи­руешь.

Графическая программа, как конечный продукт, с одной стороны, воплощает некоторые обобщенные методы и алгоритмы. С другой стороны, эти методы и алгоритмы должны обязательно соответствовать архитектуре компьютера и

операционной системы. Разумеется, можно писать программы, не зная, i

устроен процессор и как работает память, однако это непрофессионально.

I Важный аспект при разработке программ — это изучение особенностей оп(

рационной системы (ОС)— в нашем случае это будет Windows. Извести несколько библиотек, например MFC или OWL, которые прячут дета| функционирования Windows, и может показаться, что успешно программ! ровать можно без изучения операционной системы. Вместо этого изучаете версия библиотеки, считающаяся на данный момент современной. Но биб! лиотеки изменяются, некоторые из них вообще исчезают, и тогда необхода мо изучать очередную библиотеку и инструментальную среду разработку Так рано или поздно приходит осознание того, что изучение самой операци' онной системы (которая существует значительно дольше, чем любая из би$ лиотек и сред программирования для этой ОС) и архитектуры компьютера' закладывает надежный фундамент для дальнейшего повышения квалифш* ции, в том числе и для овладения новыми технологиями программирования,

Мы будем изучать использование функций API Windows без посредничеств* высокоуровневых библиотек общего назначения для разработки программ; Потом рассмотрим графическую библиотеку OpenGL.

Из множества литературных источников, освещающих эту тему, можно по­рекомендовать в первую очередь документацию SDK для разработчиков Windows-программ [61] и прекрасную книгу [20J.

6.1. Первый пример программы для Windows

Наша первая графическая программа названа StudEx. Она предназначена для работы в среде 32-битных ОС Windows различных версий, например, 95, 98, 2000, Millennium, NT. Программа написана на языке C++ (строго говоря почти что на чистом С, если не считать комментариев) с использований

функций API Windows. Текст программы состоит из трех файлов

studex.cpp, studex.rc, studex.def.

Файл studex. cpp (это главный файл текста программы):

И-------Затем следует определение функций---------------

I/--------------Главная функция программы-------------------

//----Она определяет первые шаги работы программы----------

ц---д0 создания окна и вхождения в цикл сообщений---------

//—для Windows-программ функция С,C++ main названа WinMain

//-----------организация цикла обработки сообщений-------

while (GetMessage(&msg,NULL,NULL,NULL))

TranslateMessage(smsg);

DispatchMessage(Smsg);

}

return msg. wParam; }

//-------------функция главного окна программы---------

//—ее вызывает Windows, когда посылает сообщение нашей—

//-------------------------программе-------------------

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,

WPARAM wParam, LPARAM lParam) switch (message) //Обработка всех сообщений для окна

case WM_COMMAND: //Обработка сообщений пунктов меню switch (LOWORD(wParam)) {

case 201: //выбран пункт меню Графика

DrawStudyExample(hWnd); //это наша собственная

//функция break;

case 108:

DestroyWindow(hWnd); //для завершения работы break;

default : break; }

break; case WM_DESTROY:

PostQuitMessage(0); //для окончания цикла сообщений break;

default : return DefWindowProc(hWnd, //обработка

message, //всех wParam, //остальных

lParara); //сообщений

}

return 0L; }

//-----------это наша собственная функция, она-----------

//-будет содержать графические операторы рисования в окне---

void DrawStudyExample(HWND hWnd)

(

HDC hdc;

hdc = GetDC (hWnd) ; //контекст окна

if (hdc)

{

//после того, как получено ненулевое hdc, можно рисовать,

//например, десять прямоугольников размером 70 х 50 ...

for (int i=0; i<10; i++)

Rectangle(hdc, i*30, i*20, i*30+70, i*20+50);

}

ReleaseDC(hWnd,hdc); //этот контекст больше не нужен

)

Файл studex. гс (здесь содержится описание меню):

STUDEXMENU MENU

(

POPUP "«.Файл"

{

MENUITEM "&Открыть...", 101

MENUITEM "«.Записать как...", 102 | MENUITEM SEPARATOR

MENUITEM "«.Печать", 103

MENUITEM SEPARATOR

MENUITEM "«.Закончить", 108

1

MENUITEM "«.Графика", 201 I

Файл studex.def (файл описания для Windows):

NAME StudEx

DESCRIPTION 'Study Example1

EXETYPE WINDOWS

CODE PRELOAD MOVEABLE DISCARDABLE

DATA PRELOAD MOVEABLE MULTIPLE

Приведенный выше текст программы — это только исходный текст. Его не­обходимо скомпилировать, чтобы получить выполняемый файл в машинных кодах. Для компиляции и отладки этой программы можно использовать раз­нообразные инструментальные средства программирования, например, Bor­land C++ 5.02, Borland C++ Builder, Microsoft Visual C++ 6.0 и другие. После создания проекта в среде системы программирования в результате компили-

рования получим выполняемый файл. Имя этого файла— studex.exe (или другое, что определяется при создании проекта). Запустите программу в сре­де Windows. После появления окна программы выберите пункт меню "Гра­фика". На экране дисплея будет изображение, как на рис. 6.1.

Рис. 6.1. Первый пример графической программы

6.2. Модульность программ

Приведенный выше текст первого примера графической программы для ОС Windows достаточно объемный. Для того чтобы упростить тексты других примеров графических программ, необходимо спланировать наше дальней­шее программирование. Рассмотрим структуру главного файла (studex.cpp):

Как видим, программа состоит из трех частей. Первая из них, содержащая функцию winMain, будет присутствовать во всех следующих примерах без всяких изменений. Это достаточно длинный текст, поэтому вместо того, что­бы его каждый раз копировать во всех следующих примерах, создадим от­дельный файл, на который будем ссылаться в дальнейшем, и назовем его

winmain.cpp:

I

[ //--------------------функция WinMain и объявление WndProc---------

В следующих примерах мы будем использовать различные варианты окон­ной функции WndProc. Тот вариант, что приведен для первого примера, будет часто использоваться — его также запишем в отдельный файл и назовем

В файле winmainl. срр содержится текст оконной функции, объявление фунь ЦИИ DrawStudyExample И директива'#include "winmain. срр", благодаря КОТО рой при компиляции используется текст функции winMain. Следовательно, текст первого примера программы можно трансформировать в такой:

Это значительно короче. Большой кусок программы, включающий функции; создания и обслуживания окна, спрятан в отдельных файлах, ссылка на кото­рые выполнена директивой #inciude. Такая модульность с использованием отдельных кусков текста, которые вначале собираются в единый текст и за­тем компилируются все вместе, может эффективно применяться лишь для небольших программ, которые мы и рассмотрим в качестве примеров. Для 1 более сложных программ лучше использовать проекты из раздельно компи-1 лируемых модулей OBJ, а также библиотеки DLL и компоненты типа ActiveX.

6.3. Использование

графических функций API Windows

Операционная система Windows предоставляет программистам возможность использовать в своих программах сотни разнообразных функций, доступ к которым сделан в виде интерфейса API (Application Program Interface). При разработке программы на основе компьютерных языков, таких как С, C++, Pascal, в текст программы можно включать вызовы функций, которые входят в состав API Windows. После компиляции создается выполняемый файл (*.ехе), который можно запускать на разных компьютерах с различными вер­сиями ОС Windows, и программа будет корректно выполняться. Поскольку сами функции располагаются в модулях операционной системы, а в нашей программе содержатся только вызовы функций (call), то код выполняемого файла имеет небольшой размер.

Необходимо заметить, что мы будем рассматривать программы согласно спецификации Win32 для ОС Windows версий 95, 98, частично для NT и 2000. Существует несколько систем программирования, которые поддер­живают разработку таких программ, например, Borland C++ [11, 59].

6.4. Контекст графического устройства

Графические функции из состава API Windows объединены в отдельную группу — подсистему GDI (Graphic Device Interface). Важная черта подсис­темы GDI — аппаратная независимость многих функций от конкретного гра­фического устройства.

Контекст графического устройства (Device Context) — это важный элемент графики в среде операционной системы Windows. Понятие контекста введено для описания того, где будет рисоваться изображение. Другими словами, контекст графического устройства указывает плоскость отображения, на ко­торую делается графический вывод. В качестве контекста может быть окно программы на экране дисплея или страница принтера, или другое место, куда можно направить графический вывод.

Если ваша программа делает вызов графических функций API Windows, та­ких как рисование точек, линий, фигур, текста и тому подобных, необходимо указывать идентификатор контекста (handle of device context) и координаты. Вызов необходимого драйвера — для экрана дисплея, принтера или другого устройства — делает уже сама Windows. Это в значительной мере освобож­дает программиста от второстепенных дел и облегчает разработку программ, однако желательно учитывать специфику работы конкретного устройства.

Идентификатор контекста графического устройства (hdc)— это числовое значение, знание которого дает возможность направить графический вывод в нужное место. Перед началом рисования необходимо получить это числовое значение. После рисования обычно нужно освободить, деактивизировать контекст. Несоблюдение этого требования чревато неприятными последст­виями— от утечек памяти до прекращения нормальной работы программы. Корректное использование контекста графического устройства осуществля­ется в такой последовательности:

1. Создание, активизация контекста, получение значения hdc.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее