Программирование графических приложений в системе 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 Кб (Скачать документ)

Введение

К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.  
В кoмпьютepнoй гpaфикe мoжнo выдeлить тpи видa зaдaч, кoтopыe мoжнo peшить пpи пoмoщи кoмпьютepнoй гpaфики:  
1. Пepeвoд oпиcaния в изoбpaжeниe.  
2. Пepeвoд изoбpaжeния в oпиcaниe (зaдaчa pacпoзнaвaния oбpaзoв) .  
3. Peдaктиpoвaниe изoбpaжeния.  
Cфepa пpимeнeния кoмпьютepнoй гpaфики oчeнь шиpoкa, нo вcё тaки мoжнo выдeлить ocнoвныe нaпpaвлeния, гдe cpeдcтвa кoмпьютepнoй гpaфики cтaли вaжнeйшими для peшeния зaдaч:  
1. Иллюcтpaтивнoe – этo caмoe шиpoкoe из нaпpaвлeний, кoтopoe oxвaтывaeт зaдaчи oт визyaлизaции дaнныx дo coздaния aнимaциoнныx фильмoв.  
2. Caмopaзвивaющeecя – кoмпьютepнaя гpaфикa пoзвoляeт pacшиpять и coвepшeнcтвoвaть cвoи вoзмoжнocти.  
3. Иccлeдoвaтeльcкoe – coздaниe cpeдcтвaми кoмпьютepнoй гpaфики изoбpaжeния aбcтpaктныx пoнятий либo мoдeлeй, физичecкoгo aнaлoгa кoтopыx пoкa нe cyщecтвyeт c цeлью кoppeктиpoвки иx пapaмeтpoв.  
Гpaфичecкиe peдaктopы пoзвoляют coздaвaть cлoжныe тpexмepныe изoбpaжeния c тeнeвыми эффeктaми, плaвными пepexoдaми тoнoв. Мoжнo ocвeтить oбъeкт нecкoлькими иcтoчникaми cвeтa и пoдбиpaть иx pacпoлoжeниe дo тex пop, пoкa нe пoлyчитcя нeoбxoдимaя выpaзитeльнocть coздaвaeмoгo oбpaзa. Гpaфичecкий peдaктop - этo пpoгpaммa coздaния, peдaктиpoвaния и пpocмoтpa гpaфичecкиx изoбpaжeний.  

 

 

 

 

1. СОЗДАНИЕ ОКОН

Окна являются основой  графического интерфейса пользователя

операционной системы  Windows.

Для разработчика окно является совокупностью большого числа

элементов, функционирующих  под управлением приложения и 

операционной системы.

С точки зрения языка программирования, окна – это объекты 

(переменные), над которыми  выполняют действия. Объект 

принадлежит к определенному  классу (типу), который описывает 

множество данных (параметров состояния окна) и метод (функцию)

изменения этих данных.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1. Виды окон

Программы для операционной системы Windows называют

приложениями. Пользователь взаимодействует с приложением 

через окна следующих видов:

1. Окно приложения. Оно  элементизирует работу, появляется

первым при запуске  и закрывается вместе с прекращением работы

приложения.

2. MDI-окна. Они служат для  одновременной обработки 

нескольких документов.

3. Окно помощи. Оно в  большей степени работает под

управлением операционной системы, чем под управлением 

приложения.

4. Диалоговое окно. Оно  обеспечивает оперативный обмен 

данными между пользователем  и приложением.

Главное окно имеет обрамляющие двойные рамки,

заголовок, различные кнопки, полосу меню, панель инструментов с

кнопками, полосы просмотра, строку состояния и др. Эти элементы

также являются окнами, имеют  свои данные и метод их изменения,

т.е. принадлежат к классам  окон.

Функция окна

Функция окна описывает реакцию  окна на поступающие

сообщения. От обычных функций  отличается следующим:

• имеет стандартные тип возврата и список формальных

параметров;

• вызывается только операционной системой при поступлении 

сообщения окну;

• сообщения, которые не обрабатываются функцией окна,

возвращаются операционной системе.

Есть еще одно отличие. В объектно-ориентированном 

программировании методы изменения параметров состояния объекта

(функции-члены) обычно  описывают отдельно. Функция окна 

реализует единственный метод  для изменения всех параметров

состояния окна.

Имя функции окна – это  обычное имя, определяемое

разработчиком. При регистрации  класса операционная система 

запоминает указатель  на эту функцию.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.2. Создание окон

Для создания окна вызывается функция CreateWindow. Она

создает перекрывающееся, временное  или дочернее окно и 

устанавливает начальные  значения некоторых его параметров. Эта 

функция объявлена следующим  образом:

HWND CreateWindow(

LPCTST

R

lpClassName, //Указатель на имя класса

LPCTST

R

lpWindowName, //Указатель на имя окна

DWORD dwStyle, //Стиль окна

int x, //Координата левого края окна

int y, //Координата верхнего края окна

int nWidth, //Ширина окна

int nHeight, //Высота окна

HWND hWndParent, //Дескриптор окна-родителя или

//окна-владельца

HMENU hMenu, //Дескриптор меню или

// идентификатор дочернего  окна

HANDLE hInstance, //Дескриптор приложения

LPVOID lpParam //Указатель на данные окна

)

Рассмотрим назначение аргументов вызова этой функции:

1) lpClassName – имя зарегистрированного функцией

RegisterClass или определенного операционной системой класса;

2) dwStyle – стиль окна. Стиль окон будет отдельно рассмотрен

ниже;

3) х – координата левого  края окна в пикселях. Для 

перекрывающихся или временных  окон координату х отсчитывают от

левого края экрана, дочерних окон – от левого края рабочей области 

родительского окна. Если для  перекрывающегося окна со стилем

WS_VISIBLE в качестве х  задать константу CW_USEDEFAULT, то 

Windows устанавливает не обязательно нулевую позицию по

умолчанию для левого верхнего угла окна и игнорирует координату у

верхнего края окна. Для  временного и дочернего окна позиция  по

умолчанию равна (0, 0);

4) у – координата верхнего  края окна в пикселях. Для 

перекрывающихся и временных  окон ее отсчитывают от верхнего

края экрана, дочерних окон – от верхнего края рабочей области 

родительского окна;

5) nWidth – ширина окна в пикселях. Для перекрывающихся

окон можно задать равной CW_USEDEFAULT. В этом случае

система устанавливает ненулевые  значения ширины и высоты по

умолчанию и игнорирует заданную высоту nHeight окна. Ширина и

высота временного и дочернего  окна по умолчанию равны нулю;

6) hWndParent – дескриптор окна-родителя, обязательно

указывают при создании дочернего  окна. Дескриптор окна-владельца 

для временного окна указывать  необязательно;

7) hMenu – дескриптор меню или идентификатор создаваемого 13

дочернего окна. Меню перекрывающегося или временного окна

можно задать тремя способами:

в классе окон указывают  имя меню, и все окна этого класса

могут пользоваться этим меню;

имя меню указывают как  аргумент функции CreateWindow, и

создаваемое окно будет пользоваться этим меню, игнорируя 

меню класса;

меню создают в процессе или после создания окна.

В первом и третьем случаях  аргумент hMenu равен NULL. Если

создается дочернее окно, то аргументом hMenu задают

идентификатор этого окна (целочисленную константу).

Перед созданием окна функция  CreateWindow посылает код

сообщения WM_CREATE функции  создаваемого окна. Затем она 

обрабатывает возвращаемое функцией окна значение и создает  окно,

если это значение равно 0, или не создает окна, если значение равно 

1. Соответственно функция  Create Window возвращает дескриптор

созданного окна или NULL.

Стиль окна задает внешнее  поведение окна. Для описания

стиля окна используют символические  константы с префиксом WS_ .

По совокупности свойств  различают перекрывающиеся 

(overlapped), временные (pop-up) и дочерние (child) окна.

Перекрывающиеся окна чаще используют в качестве окон

приложения. Они всегда имеют  заголовок (title bar), рамку и

рабочую область окна (client region), могут иметь системное меню,

кнопки восстановления размеров, закрытия и сворачивания окна в

пиктограмму, горизонтальную и вертикальную полосы просмотра 

(scroll bar), меню, панель инструментов (tool bar) и строку состояния

(status bar) . Базовый стиль таких окон описан константой

WS_OVERLAPPED. Чаще используемый  стиль окон 

WS_OVERLAPPEDWINDOW в дополнение  к базовому указывает,

что окно имеет системное  меню, кнопки восстановления размеров,

закрытия и сворачивания окна.

Перекрывающееся окно может  принадлежать другому окну

(владельцу). Если окно-владелец  сворачивается в пиктограмму,  то 

подчиненные ему окна становятся невидимыми. При уничтожении 

окна автоматически уничтожаются подчиненные ему окна.

Подчиненные окна всегда располагаются над поверхностью окна

владельца, загораживая его.

Временные окна обычно используют для вывода сообщений 

пользователю и остаются на экране непродолжительное время.

Базовый стиль временного окна описан константой WS_POPUP.

Такое окно по умолчанию  не имеет заголовка. Чаще временное  окно

описывают константой WS_POPUPWINDOW. Для добавления к

временному окну системного меню и заголовка стиль 

WS_POPUPWINDOW комбинируют со  стилем WS_CAPTION. Во 

всем остальном временные  окна – это специальный вид 

перекрывающихся окон.

Дочерние окна используют для создания элементов 

управления. Определяемые системой классы элементов управления

(кнопки, полосы просмотра  и т. п.) представляют собой  дочерние 

окна. Базовый стиль дочерних окон описан константой WS_CHILD.

Этот стиль полностью  совпадает со стилем WS_CHILDWINDOW.

Дочерние окна не имеют  кнопок минимизации и максимального 

увеличения размера, но всегда имеют окно-родителя. Они 

«прилипают» к поверхности  родителя, перемещаются с ним и  не

могут выйти за пределы  родительского окна.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.Гавная функция приложения

Приложения всегда описывают  функцию с именем WinMain.

Она получает управление при  запуске приложения, выполняет 

присущие обычным функциям действия, регистрирует классы окон,

создает окна, опрашивает очередь  сообщений и распределяет свои

сообщения.

Приведем пример описания функции WinMain:

int WINAPI WinMain( HINSTANCE hInstance,

HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

MSG msg; HWND hwnd;

if (!RegClass(WndProc, szClassName)) return FALSE;

hwnd = CreateWindow(szClassName,

"Пример", WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

0, 0, hInstance.NULL);

if (!hwnd) return FALSE;

ShowWindow( hwnd, SW_SHOWMAXIMIZED);

UpdateWindow(hwnd);

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

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

Имя, тип возврата и список формальных параметров функции 

определены требованиями Windows API. Модификатор WINAPI

указывает на то, что функция  при получении аргументов сама должна

откорректировать порядок  расположения аргументов в стеке.

Параметр hInstance от операционной системы получает

дескриптор текущего экземпляра приложения. Параметр

hPrevInstance в 16-разрядных приложениях указывает на активный

предыдущий экземпляр  приложения или NULL. В приложениях 

Win32 он всегда равен  NULL и по нему невозможно узнать о

существовании других активных экземпляров этого приложения.

Параметр lpszCmdLine указывает на строку с аргументами командной

строки запуска приложения. При обычном запуске этот параметр

равен NULL. Параметр nCmdShow передает приложению способ

начального отображения  окна.

В теле функции WinMain описаны переменные msg и hwnd.

Переменная msg предназначена для временного хранения

сообщений при их получении  и распределении. Переменная hwnd

хранит дескриптор созданного окна.

Сообщение msg представляет собой структуру типа MSG:

typedef struct{

HWND hwnd; //Дескриптор окна-адресата

UINT message; //Код сообщения

WPARAM wParam; //Содержимое сообщения

LPARAM lParam; //Содержимое сообщения

DWORD time; //Время отправления

POINT pt; //Координаты места отправления

} MSG; //Имя типа

Для регистрации класса окон вызывают функцию RegClass:

if (!RegClass(WndProc, szClassName)) return FALSE;

Для создания окна вызвана  функция CreateWindow. Если окно 16

не создано, приложение завершает  свою работу.

Следующий после создания окна шаг выполняют не всегда. В 

данном примере окно не имеет стиля WS_VISIBLE и создано только

в памяти. Для отображения  окна вызывают функцию ShowWindow:

ShowWindow( hwnd, SW_SHOWMAXIMIZED);

Эта функция переводит  окно hwnd в состояние, определяемое

вторым параметром. Здесь  окно hwnd отображают в максимально

распахнутом виде.

Следующая функция сообщает функции окна hwnd о

необходимости «перерисовки»  рабочей области:

UpdateWindow(hwnd);

Далее следует цикл, который  называется циклом обработки 

сообщений:

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

TranslateMessage(&msg);

DispatchMessage(&msg);

}

Здесь функция GetMessage выбирает сообщение из очереди

сообщений приложения, функция  TranslateMessage транслирует

клавиатурные сообщения, функция DispatchMessage распределяет

сообщения по функциям окон. Именно здесь происходит «вызов»

функции окна.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1. Структура текста приложения

Структура текста приложения определяется двумя 

требованиями:

1)текст содержит описание  функции с именем WinMain,

2)если регистрируются  новые классы, то текст содержит 

описание структуры типа WNDCLASS и функций окон этих

классов.

Регистрирует класс перекрывающихся

окон, создает окно этого  класса и передает управление циклу 

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

 Иллюстрация структуры  простейшего приложения.

#include <windows.h> //Объявление функций

BOOL RegClass(WNDPROC, LPCTSTR, UINT);

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,

LPARAM);

//Описание глобальных  переменных

HINSTANCE hInst;

char szClassName[ ] = "WindowAppClass";

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE

hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {

MSG msg;

HWNDhwnd; hInst=hInstance;

if (!RegClass( WndProc, szClassName,COLOR_WINDOW))

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