Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Labs 2004 / Lab1 / LABOR_1.DOC
Скачиваний:
28
Добавлен:
16.04.2013
Размер:
390.66 Кб
Скачать

Программирование графики в Windows.

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

Операционная система Windowsимеет набор библиотечных функций для разработки приложений. Эти функции обеспечивают широкую поддержку программирования приложенийWindowsи в совокупности называются интерфейсAPI(ApplicationProgramInterface–интерфейс прикладного программирова­ния). Графические функции из составаAPIWindowsобъединены в отдельную группу – подсистемуGDI(GraphicDeviceInterface– интерфейс графических устройств). В литературе эти функции называют – графические функцииAPIWindowsили функцииGDIWindows.

Во-вторых, работающая программа взаимодействует с операционной системой Windows с помощью механизма передачи сообщений. Все свои действия программа производит в ответ на последовательность сообщений. Все время пока программа работает, Windows посылает ей сообщения. Сообщение возникает, если что-то происходит в системе, например нажатие клавиши, движение мыши и т.д. Эти сообщения помещаются в очередь. Очередь может хранить несколько сообщений. Программа обращается к очереди и извлекает первое из сообщений. Затем программа или обрабатывает это сообщение или переходит к следующему сообщению. Рассмотрим некоторые из этих сообщений.

  1. Сообщение WM_PAINT отправляется, если существует необходимость нарисовать или перерисовать окно программы.

  2. Сообщение WM_COMMAND отправляется, если пользователь выбирает команду меню.

  3. Сообщение WM_DESTROY отправляется перед тем, как окно уничтожается и программа прекращает работу.

В-третьих, программа работает в оконном режиме. При запуске программы создается окно, в котором выводятся результаты работы программы. Приведем код программы создающей рабочее окно. Пусть код находится в файле OnlyWin.cpp

#define STRICT

#include <windows.h>

#include <windowsx.h>

//имя класса окна

char const szClassName[] = "LineClass";

//заголовок окна

char const szWindowTitle[] = "Korneev V. Graphics to Windows";

//прототипы функций

BOOL RegisterApp(HINSTANCE hInst);

HWND CreateApp(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void Line_OnDestroy(HWND);

//Главная функция - точка входа в программу

#pragma argsused

int PASCAL WinMain(HINSTANCE hInst,

HINSTANCE hPrevInstance,

LPSTR lpszCmdParam,

int nCmdShow) .

{

MSG msg;//структура для работы с сообщениями

if(!RegisterApp(hInst))//регистрация приложения

return FALSE;

if(!CreateApp(hInst,nCmdShow)) //создание окна приложения

return FALSE;

while(GetMessage(&msg,NULL,0,0)) //цикл обработки сообщений

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

//Регистрация класса окна

BOOL RegisterApp(HINSTANCE hInst)

{

WNDCLASS wc;

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInst;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = GetStockBrush(GRAY_BRUSH);

wc.lpszMenuName = "APP_MENU";

wc.lpszClassName = szClassName;

return RegisterClass(&wc);

}

//Создание окна приложения (рисование окна)

HWND CreateApp(HINSTANCE hInstance, int nCmdShow)

{

HWND hwnd; //идентификатор окна приложения

hwnd = CreateWindow(szClassName,

szWindowTitle,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

NULL,

NULL,

hInstance,

NULL);

if(hwnd = = NULL)

return hwnd;

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

return hwnd;

}

//оконная процедура, обрабатывающая сообщения

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,

WPARAM wParam, LPARAM lParam)

{

switch(msg)

{

case WM_DESTROY:

Line_OnDestroy(hwnd);

break;

default:

return DefWindowProc(hwnd,msg,wParam,lParam);

}

return 0L;

}

//функция обрабатывающая сообщение WM_DESTROY

#pragma argsused

void Line_OnDestroy(HWND hwnd)

{

PostQuitMessage(0); //закрываем окно

}

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

Рассмотрим функцию регистрации приложения.

Поля структуры WNDCLASS регистрации класса окна заполняются следующим образом

  1. style - стиль окна. В нашем случае окно перерисовывается, при изменении горизонтальных или вертикальных размеров окна

  2. lpfnWndProc - имя оконной процедуры

  3. cbClsExtra - дополнительные данные об окне

  4. cbWndExtra - дополнительные данные об окне

  5. hInstance - дескриптор(номер) приложения

  6. hIcon – пиктограмма окна (иконка)

  7. hCursor – форма курсора, в нашем случае это стрелка

  8. hbrBackground – цвет окна

  9. lpszMenuName - имя меню окна

  10. lpszClassName - имя класса окна

Рассмотрим функцию создания окна.

Функция CreateWindow определяет свойства конкретного окна.

У этой функции 11 параметров

  1. имя класса окна

  2. заголовок окна

  3. вид окна.

  4. x– координата окна

  5. y– координата окна

  6. ширина окна

  7. высота окна

  8. дескриптор предка окна

  9. дескриптор меню дочернего окна

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

  11. адрес оконных данных

Теперь необходимо компилировать и компоновать программу OnlyWin.

Установки компилятора BC++ 3.1 под Windows .

Компилятор BC++ 3.1 позволяет создавать 16 - битныеWindowsприложения. Для задач нашего курса этого вполне достаточно. Если же возникнет необходимость в 32 – битныхWindowsприложениях, то их можно создать, используяBC++ 5.02 илиMSVisualC++ .

Откройте основное меню IDE. Выберете пункт менюOptions, и пройдитесь по цепочке:OptionsCompiler - Code generationи поставьте точку передModel Large. Затем пройдитесь по другой цепочке:OptionsCompiler - Entry/Exit Codeи поставьте точку передWindows all functions exportable . Следующая цепочка этоOptionsLinkerSettingsгде надо поставить точку передWindows EXE. В этом случае подключать графическую библиотекуBorlandCне имеет смысла, так какWindowsпрограммы используют графические функции системыWindows. Поэтому, создавWindowsпрограмму вIDEBC++ 3.1 и проведя отладку (компиляция и компоновка), надо выйти из этой среды и запускатьEXEфайл изWindowsсреды. Сохраните установки компилятора следующей цепочкойOptionsSave.

Компиляция WIN32 –программ с помощью VISUAL C++ 6.0

Пусть код программы находится в файле OnlyWin.cppв каталогеPROG.

Запустим VISUALC++ и в главном меню в пунктеFileпройдем по цепочке:FileNewProject, где выбираем пунктWin32Application. В окнеLocationуказываем путь..\PROG, в окнеProject nameнабираемOnlyWint. НажимаемOK.

Далее выбираем An empty project, нажимаемFinishи нажимаемOK.

В главном меню слева появляется окно (Workspace) у которого внизу две надписиClass ViewиFile View. ВыбираемFile Viewи вверху слева щелкаем по плюсу +. Подводим мышку к надписиSource filesи щелкаем правой кнопкой. В появившемся маленьком меню выбираем пунктAdd Files to Folder. Укажите путь к файлуOnlyWin.cpp, в нашем случае это ..\PROG\ OnlyWin.cpp. У пунктаSource filesпоявится плюс +. Щелкните по плюсу левой кнопкой. Откройте файлOnlyWin.cppв главном меню (двойной щелчок левой кнопкой).

Теперь, чтобы компилировать код, в пункте BuildвыберетеCompileOnlyWin.cpp. Если компиляция прошла успешно, то в пунктеBuildвыберетеBuildOnlyWin.exeи создайтеexe-файлOnlyWin.exe.

После компиляции и компоновки получаем исполняемый файл OnlyWin.exe. Запускаем программу. На Рис.5 приведен результат работы программы.

Рис.5

Соседние файлы в папке Lab1
  • #
    16.04.20135.53 Кб23EGAVGA.BGI
  • #
    16.04.201344.81 Кб23GRAPHDOS.EXE
  • #
    16.04.201327.66 Кб24GRAPHWIN.EXE
  • #
    16.04.2013390.66 Кб28LABOR_1.DOC
  • #
    16.04.201311.9 Кб24ONLYWIN.EXE
  • #
    16.04.2013128 б25Readme.txt