Программирование >>  Процедурные приложения 

1 ... 91 92 93 [ 94 ] 95 96 97 ... 150


Глава 17. Процедурные приложения для Windows

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

o Основные компоненты приложения

o Функция WinMain()

o Структура WNDCLASS

o Структура WNDCLASSEX

o Определение класса окна

o Создание окна

o Отображение и обновление окна

o Цикл обработки сообщений

o Оконная процедура

o Обработка сообщения WM PAINT

o Обработка сообщения WM DESTROY

o Функция DefWindowProc()

Создание проекта

Текст программы

o Рисование эллипса

o Рисование сегмента

o Рисование сектора

o Рисование прямоугольника

Использование файла SWP.C в качестве шаблона

Создание диаграмм

o Файл PIE.H o Файл PIE.RC o Файл PIE.C

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

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

В данном параграфе мы рассмотрим компоненты, из которых состоит программа SWP.C (SimpleWindowsProgram). Будет показано, что необходимо включить в программу для создания и отображения на экране окна приложения (с рамкой, строкой заголовка, системным меню и кнопками свертывания/развертывания), а также для корректного завершения приложения.



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

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

Таблица 17.1. Часто используемые типы данных

Описание

callback

Замещает спецификацию farpascal в функциях обратного вызова

handle

32-разрядное беззнаковое целое число, используемое в качестве дескриптора

Дескриптор контекста устройства

hwnd

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

LONG

32-разрядное целое число со знаком

param

Используется для описания младшего аргумента сообщения

LPCSTR

То же, что и lpstr, но используется для указания константных строк

pstr

32-разрядный указатель на строку

pvoid

Обобщенный тип указателя, эквивалентен void*

result

Используется для возвращения значений из оконных процедур

uint

32-разрядное беззнаковое целое число

wchar

06-разрядный символ UNICODE; используется для представления печатных символов всех языков мира

winapi

Замещает спецификацию farpascal в описаниях API-функций

wparam

Используется для описания старшего параметра сообщения

В табл. 17.2 приведено несколько стандартных структур Windows.

Таблица 17.2. Часто используемые стандартные структуры

Структура

Что определяет

Параметры сообщения

PAINTSTRUCT

Область окна, требующую перерисовки

rect

Прямоугольную область

WNDCLASS

Класс окна

Основные компоненты приложения

Приложения Windowsсодержат два общих элемента: функцию winMain() и оконную процедуру. Функция winMain() составляет основу любого приложения. Она служит как бы точкой входа в приложение и выполняет ту же роль, что и функция main() в обычных программах на С и C++.

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

Функция WinMain()

Функция winMain(), как уже было сказано, является обязательным компонентом любого приложения Windows. С нее начинается выполнение программы и ею же обычно заканчивается. Функция WinMain() отвечает за следующее:

создание и инициализацию цикла обработки сообщений (который имеет доступ к очереди сообщений приложения);

начальную инициализацию приложения;



регистрацию класса окна приложения;

завершение выполнения программы, обычно в результате получения сообщения WM QUIT.

В функцию WinMain() передаются четыре параметра:

int WINAPI WinMain(HINSTANCE hlnst, HINSTANCE hPrelnst, LPSTR

IpszCmdLine, int nCmdShow)

Первый параметр, hlnst, представляет собой дескриптор экземпляра приложения. Второй, hPrelnst, всегда содержит значение null, что указывает на отсутствие других, запущенных ранее, экземпляров приложения.

Примечание

В ранних версиях Windows(вплоть до 3.x) параметр hPrelnst позволял определить, были ли запущены другие копии приложения. В Windows 95/98/NTдля каждого запущенного модуля выделяется отдельное адресное пространство, в связи с чем параметр hPrelnstвсегда устанавливается равным NULL.

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

Последний параметр, nCmdShow, задает одну из многочисленных констант, определяющих возможные варианты отображения окна, например SW SHOWNORMAL, SWSHOWMAXIMIZEDИЛИ SWSHOWMINIMIZED.

Структура WNDCLASS

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

Примечание

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

Для описания всех классов окон используется единая структура. Следующий пример взят непосредственно из файла WINUSER.H, включаемого в файл WINDOWS.H с помощью директивы #include.

typedef struct tagWNDCLASSW (

UINT style WNDPROC IpfnWndProc int cbClsExtra; int cbWndExtra;

HANDLE hlnstance; HICON hlcon; HCURSOR hCursor

HBRUSH hbrBackground; LPCWSTR IpszMenuName; LPCWSTR IpszClassName;

} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;

Структура wndclassw предназначена для работы с UNICODE-строками. Имеется также аналогичная ей структура wndclassa, ориентированная на работу с ASCII-строками. С помощью



1 ... 91 92 93 [ 94 ] 95 96 97 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика