Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Основы приложений Windows






 

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

 

WinMain. Все приложения Windows начинают свое выполнение с вызова WinMain(), а не с функции main(), как это делается в консольных приложениях. WinMain() имеет некоторые свойства, отличающие эту функцию от остальных функций приложения. Во-первых, она должна быть описана в программе как WINAPI. В дальнейшем мы будем использовать также описание APIENTRY; оба варианта описания имеют одинаковый смысл.

По умолчанию все функции в «С» и «C++» используют соглашения о вызовах, принятые для С-программ. Допускается также применение функций, вызываемых иначе; в данном случае используется тип соглашения о вызовах, принятый в среде языка Pascal. По различным техническим причинам Windows использует для WinMain() вызов типа WINAPI. Значение, возвращаемое WinMain(), должно иметь тип int.

 

Оконная функция. Все программы для Windows должны содержать некоторую функцию, которая вызывается не из Вашей программы, а операционной системой. Эту функцию часто называют оконной функцией или оконной процедурой. Оконная функция вызывается опера­ционной системой Windows, когда программе нужно послать сообщение. Используя эту функцию, Windows взаимодействует с Вашей программой. В качестве параметров оконная функция получает сообщение, посылаемое Windows. Все оконные процедуры должны объявляться как LRESULT CALLBACK. Тип LRESULT определяется при помощи оператора typedef; первоначально этот тип означал длинное целое (long). Тип вызова CALLBACK используется для функций, вызываемых операционной системой Windows.

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

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

 

Классы окон. Когда Ваша программа, написанная для Windows, начинает выполняться впервые, ей необходимо определить и зарегистрировать класс окна. (Здесь слово класс употребляется не в смысле определения из C++. Скорее, оно должно означать стиль или тип.). Регистрируя класс окна, Вы сообщаете Windows об основных атрибутах и функциях окна. Однако регистрация класса не означает создание окна. Для этого требуются дополнительные действия.

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

Типы данных в Windows. Как Вы скоро увидите, программы для Windows редко используют стандартные типы данных C/C++, такие как int или char*. Вместо стандартных типов в них используются типы данных, определенные при помощи оператора typedef в файле windows.h и/или сопутствующих файлах. Файл Windows.h поставляется Microsoft (или любой другой компанией, выпускающей компиляторы C/C++ для Windows) и должен включаться во все программы для Windows. Вот некоторые из этих типов: HANDLE, HWND, BYTE, WORD, DWORD, UINT, LONG, BOOL, LPSTR, LPCSTR, HANDLE представляет собой 32-разрядное целое число, используемое как дескрип­тор. Существует множество типов дескрипторов, но все они имеют ту же размерность, что и HANDLE.

Дескриптор – это просто число, идентифицирующее некоторый ресурс. Например:

HWND – это 32-разрядное целое, используемое как дескриптор окна;

BYTE – 8-разрядное значе­ние без знака;

WORD – 16-разрядное короткое целое без знака;

DWORD – длинное целое без знака;

UINT – 32-разрядное беззнаковое целое;

LONG – просто другое название для long;

BOOL – это целое число, принимающее значения " истина" и " ложь";

LPSTR – указатель на строку, a LPCSTR – const-указатель на строку.

 

Кроме собственных базовых типов данных Windows определяет несколько структур. Для разработки каркаса приложения нам понадобятся структуры MSG и WNDCLASS.

MSG описывает сообщение, a WNDCLASS – класс окна. Содержимое этих структур рассмотрим позже.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.