Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

2.2.6 Новые типы данных

Несколько других идентификаторов в HELLOWIN.C являются новыми типами данных; они также определяются в заголовочных файлах с помощью либо инструкций typedef, либо инструкций #define. Это изначально сделано для облегчения перевода программ для Windows с исходной 16-разрядной системы на будущие операционные системы, которые могли бы быть основаны на 32-разрядной (или иной) технологии. Эта работа не была столь гладкой и очевидной, как тогда многие думали, но идея оказалась основательной.

Иногда эти новые типы данных вполне условны. Например, тип данных UINT, использованный в качестве второго параметра WndProc — это просто беззнаковое целое, которое сейчас в Windows является 32-разрядным. Тип данных LPTSTR, использованный в качестве третьего параметра WinMain, является указателем на строку символов, т. е. char*.

Другие имена менее очевидны. Например, третий и четвертый параметры WndProc определяются как WPARAM и LPARAM соответственно. Происхождение этих имен требует небольшого экскурса в историю. Когда Windows была 16-разрядной системой, третий параметр WndProc определялся как WORD, что означало 16-разрядное беззнаковое короткое целое, а четвертый параметр определялся как LONG, что означало 32-разрядное знаковое длинное целое, и в этом смысл префиксов "W" и "L" у слова "PARAM". Сейчас в Windows имя WPARAM определяется как UINT, а LPARAM как LONG (что представляет собой просто тип данных длинное целое языка С), следовательно, оба параметра оконной процедуры являются 32-разрядными. Это может оказаться несколько неудобным, поскольку тип данных WORD в Windows по-прежнему определяется как 16-разрядное беззнаковое короткое целое, следовательно, префикс "W" у слова "PARAM" создает некоторую путаницу.

Функция WndProc возвращает значение типа LRESULT. Оно определено просто как LONG. Функция WinMain получает тип APIENTRY (как и любая другая функция Windows, которая определяется в заголовочных файлах), а функция WndProc получает тип CALLBACK. Оба эти идентификатора определяются как stdcall, что является ссылкой на особую последовательность размещения параметров функций, которая имеет место между самой операционной системой Windows и ее приложением.

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

Первые две структуры данных используются в WinMain для определения двух структур, названных msg и wndclass. Две вторые используются в WndProc для определения структур ps и rect.

2.2.7 Описатели

Наконец, имеется еще три идентификатора, которые пишутся прописными буквами и предназначены для разных типов описателей (handles):

Описатели в Windows используются довольно часто. Перед тем как эта глава подойдет к концу, вы встретите описатель HICON (описатель иконки), описатель HCURSOR (описатель курсора мыши) и описатель HBRUSH (описатель графической кисти).

Описатель — это просто число (обычно длиной в 32 разряда), которое ссылается на объект. Описатели в Windows напоминают описатели файлов при программировании на традиционном С в MS-DOS. Программа почти всегда получает описатель путем вызова функции Windows. Программа использует описатель в других функциях Windows, чтобы сослаться на объект. Действительное значение описателя не важно для вашей программы, но модуль Windows, который обеспечивает программу описателем, "знает", как его использовать для ссылки на объект.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]