|
Программирование >> Процедурные приложения
Глава 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.2 приведено несколько стандартных структур Windows.
Основные компоненты приложения Приложения 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-строками. С помощью
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |