ALTE DOCUMENTE
|
|||||
Основы приложений Windows
Прежде чем начать разраб& 555e412f #1086;тку каркаса приложения для 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, определяющий тип получаемых сообщений и выполняющий соответствующие действия для каждого типа. Ваша программа не обязана выполнять обраб& 555e412f #1086;тку всех типов сообщений, посылаемых Windows. Сообщения, не обраб& 555e412f #1072;тываемые в Вашей программе, должны обраб& 555e412f #1072;тываться Windows по умолчанию. Поскольку в Windows существуют сотни типов сообщений, большая их часть, как правило, обраб& 555e412f #1072;тывается по умолчанию.
. Когда Ваша программа, написанная для Windows, начинает выполняться впервые, ей необходимо определить и зарегистрировать класс окна. (Здесь слово класс употребляется не в смысле определения из C++. Скорее, оно должно означать стиль или тип.). Регистрируя класс окна, Вы сообщаете Windows об основных атрибутах и функциях окна. Однако регистрация класса не означает создание окна. Для этого требуются дополнительные действия.
Цикл обраб& 555e412f #1086;тки сообщений. Как отмечалось ранее, Windows взаимодействует с Вашей программой, посылая ей сообщения. Все приложения Windows должны запускать цикл обраб& 555e412f #1086;тки сообщений функции 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 HANDLE
HWND
BYTE
WORD
DWORD
UINT
LONG - просто другое название для long;
BOOL - это целое число, принимающее значения "истина" и "ложь";
LPSTR - указатель на строку, a LPCSTR - const-указатель на строку.
Кроме собственных базовых типов данных Windows определяет несколько структур. Для разраб& 555e412f #1086;тки каркаса приложения нам понадобятся структуры MSG WNDCLASS
MSG описывает сообщение, a WNDCLASS
|