Программирование графических приложений в системе Windows. Окна. Сообщения. Основы графического вывода при помощи GDI и GDI+

Автор работы: Пользователь скрыл имя, 29 Января 2014 в 12:05, реферат

Краткое описание

Кoмпьютepнaя гpaфикa -этo область информатики, которая изучает мeтoды и cpeдcтвa coздaния и oбpaбoтки изoбpaжeний c пoмoщью пpoгpaммнo-aппapaтныx вычиcлитeльныx кoмплeкcoв. Кoмпьютepнaя гpaфикa включaeт в ceбя вce виды и фopмы пpeдcтaвлeния изoбpaжeний, кoтopыe дocтyпны для вocпpиятия чeлoвeкoм либo нa экpaнe мoнитopa, либo в видe кoпии нa внeшнeм нocитeлe.
Бeз кoмпьютepнoй гpaфики нeвoзмoжнo пpeдcтaвить ceбe нe тoлькo кoмпьютepный, нo и oбычный, мaтepиaльный миp.

Прикрепленные файлы: 1 файл

Введение.docx

— 48.61 Кб (Скачать документ)

return FALSE;

hwnd = CreateWindow(szClassName, "Мое

приложение", WS_OVERLAPPEDWINDOW

| WS_VISIBLE, CW_USEDEFAULT,

CW+USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, 0, 0, hInstance, NULL);

if (!hwnd)

return FALSE;

while(GetMessage(&msg, 0, 0, 0)) {

DispatchMessage(&msg);

}

return msg.wParam;

}

//Описание функции регистрации классов

BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT

brBackground) {

WNDCLASS wc;

wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;

wc.lpfnWndProc = Proc;

wc.hInstance = hInst;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);19

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(brBackground + 1);

wc.lpszMenuName = NULL;

wc.lpszClassName = szName;

return (RegisterClass(&wc) != 0);.

}

//Описание функции окна

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,

WPARAM wParam, LPARAM lParam )

{ switch (msg) {

case WM_DESTROY: { PostQuitMessage(0); return 0;}

}

return DefWindowProc(hwnd, msg, wParam,

lParam);

}

Как видно из листинга, приложение является обычной 

программой языка Си. Текст  содержит привычные директивы,

объявления и описания. Отличие содержится в заголовке  главной

функции, в специфической  функции окна и в способе ее вызова.

Рассмотрим алгоритм работы этого приложения.

1.Классы окон регистрируют  в начале работы приложения.

2.Окно приложения создают  до передачи управления циклу 

обработки сообщений.

3.Отсутствуют вызовы функций  ShowWindow и UpdateWindow.

Это обусловлено тем, что  окно создано со стилем

WS_VISIBLE. В таком случае  функция CreateWindow

посылает все сообщения, которые необходимы для

отображения созданного окна и перерисовки его рабочей 

области.

4.Управление передают  циклу обработки сообщений. В  теле 

этого цикла выбираются и  распределяются сообщения.

5.Функция окна обрабатывает  сообщение WM_DESTROY, а 

остальные сообщения возвращает системе. Функция окна

приложения должна обрабатывать это сообщение.

6.Приложение завершает  работу.

Таким же является алгоритм работы большинства приложений.

Отличие между ними в основном заключается в функциях окон.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2. Сообщения приложения для пользователя

Для вывода текстовых сообщений  и получения ответа

пользователя применяют  окно сообщения. Функция MessageBox

создает, отображает, обеспечивает работу и закрывает окно

сообщения.

int WINAPI MessageBox (

HWND hwnd, //Дескриптор родительского окна

LPCTSTR lpText, //Адрес текста сообщения

LPCTSTR lpCaption, //Адрес заголовка окна

UINT uType //Стиль окна сообщения

);

Если hwnd=NULL, то окно сообщения не имеет родительского

окна. При lpCaption = NULL в заголовке по умолчанию выводится

строка «Ошибка». Параметр uType задают в виде комбинации

флажков, определяющих содержание и поведение окна сообщения.

 

 

 

 

 

 

 

 

 

 

 

3.Основы графического вывода при помощи GDI и GDI+.

Все средства вывода в Windows относятся к графическому интерфейсу устройств (GDI). GDI представляет собой библиотеку функций для выполнения графического вывода на различных устройствах, не только на дисплее.

Все функции GDI взаимодействуют с контекстом устройства (device context, DC). Так что для осуществления вывода на устройство необходимо выполнить три основных шага:

получить  хендл контекста этого устройства 

осуществить собственно вывод на это устройство (рисование, вывод текста и пр.)

обязательно освободить контекст устройства.

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

Контекст  устройства описывает так называемые атрибуты контекста и непосредственно характеристики устройства.

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

Информация об устройстве описывает непосредственно возможности самого графического устройства. Функции GDI взаимодействуют с устройством опосредованно -- через контекст и через драйвер этого устройства. Для обеспечения универсальности средств вывода от драйверов требуется поддерживать некоторый базовый минимум операций. При необходимости выполнить более сложные операции GDI будет привлекать специальные программные расширения, являющиеся частью самого GDI. В случае использования устройств, способных аппаратно реализовывать дополнительные функции, GDI будет направлять запросы непосредственно драйверу этого устройства, а не использовать собственные расширения.

Как правило вы можете не заботиться о характеристиках устройств, на которых реально будет работать приложение. Однако, при разработке сложных приложений, которые могут широко распространяться, вы должны все-таки позаботиться о некоторых вопросах совместимости -- например, при назначении цветов стоит их подбирать так, что бы при переходе на черно-белое оборудование изображение осталось бы различимым. Часто лучшим решением является возможность легкой настройки программы пользователем под его конкретную аппаратуру, либо использование только системных цветов (конечно, если для всех объектов, отображаемых приложением, предусмотрены системные цвета).

Обычно  надо позаботиться о нормальном функционировании приложения в следующих случаях:

если  приложение осуществляет вывод только в окно, то надо учитывать возможность  работы:

с разным разрешением -- от 640x400, 640x480 и  до часто встречающихся 1024x768, 1280x1024. Было бы очень желательно, что бы даже в режиме 640x400 все диалоги и окна помещались на экране.

с разным числом цветов -- от 16 и до более чем 16 миллионов цветов. При этом надо учитывать как количество цветов, которое поддерживается видеокартой, так и количество цветов, которое может воспроизводить дисплей. Чисто монохроматические дисплеи (черный и белый) уже практически не встречаются, а вот дисплеи дешевых переносных компьютеров часто дают только 8-16 градаций серого; причем различимость цветов может быть невелика. Сравнительно редкий случай, когда может встретиться монохроматический дисплей -- разработка приложений для работы на серверах.

с разными настройками системной  палитры; включая контрастные и  энергосберегающие режимы (иногда применяются  для переносных компьютеров)

если  приложение способно выводить на принтер, то надо иметь в виду, что вместо принтера может оказаться плоттер, который хорошо рисует линии, но совершенно не может выводить растровых изображений, либо АЦПУ, которое способно только печатать текст.

Примечание!

Необходимо  признать, что программисты Microsoft проделали впечатляющую работу, спроектировав GDI+. Был учтен многолетний опыт использования GDI и устранены некоторые моменты, зачастую приводившие к ошибкам при работе с этим API. В частности, отпала необходимость выбирать графические объекты в контексте устройства перед их использованием. Все необходимые кисти, перья, шрифты и т.д. передаются в качестве параметров функциям рисования. А так как удаление соответствующих объектов осуществляется автоматически в деструкторах классов-оберток GDI+ (или методе Dispose интерфейса IDispose в .Net), значительно снижается вероятность утечек графических ресурсов, так досаждавших программистам, использующим GDI.

GDI+ можно условно поделить на  три функциональные составляющие: векторная графика (многочисленные  векторные примитивы), растровая  графика (с поддержкой прозрачности  и альфа-канала) и работа со шрифтами. Кроме того, в ней имеются удобные средства работы с графическими файлами популярных форматов, поддерживается их загрузка и сохранение.

 

 

 

 

 

 

 

 

 

 

 

 

Заключение.

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

     Системы, переводящие  исходный код программы в машинный  код, очень сложные и их, как  правило, создают не один десяток  месяцев и не один десяток  программистов. Такие системы  называются интегрированными средами  программирования приложений.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК  ЛИТЕРАТУРЫ:

  1. Александров П.С. Введение в теорию множеств и общую топологию. — М.: Наука, 1977. — 368 с.
  2. Аммерал Л. Принципы программирования в машинной графике. – М.: «Сол Систем», 1992. – 224 с.
  3. Архангельский А.Я. Программирование в C++ Builder 6. – М.: ЗАО «Издательство БИНОМ», 2002. 1152 с.
  4. Поляков А.Ю., Брусенцев В.А. Методы и алгоритмы компьютерной графики в примерах на Visual C++. – СПб. : БХВ – Петербург, 2003. – 560 с.
  5. Холзнер С. Visual C++ 6: Учебный курс. – СПб: Питер, 2001. – 576 с.
  6. Хусаинов А.А., Михайлова Н.Н. Алгоритмы машинной графики и их реализация на языке Си: Учеб. пособие. – Комсомольск-на-Амуре: Комсомольский-на-Амуре гос. техн. ун-т., 1999. – 65 с.
  7. Шамис В. Borland C++ Builder 6. Для профессионалов. – СПб.: Питер, 2004. – 798с.
  8. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. – М.: «ДИАЛОГ-МИФИ», 2000. – 464 с.
  9. Шилдт Г. Программирование на C и C++ для Windows 95. – Киев: Торгово – Издательское бюро BHV, 1996. – 400 с.
  10. Янг М. Программирование графики в Windows 95: Векторная графика на языке C++. – М.: Восточная Книжная Компания, 1997. – 368 с.

 

 


Информация о работе Программирование графических приложений в системе Windows. Окна. Сообщения. Основы графического вывода при помощи GDI и GDI+