Операционная система Microsoft Windows 3.1 для программиста -том 1

         

Типы данных в файле windows.h


Файл windows.h должен включаться во все исходные файлы приложений Windows. Он содержит определение типов данных, символических имен констант и прототипы функций программного интерфейса Windows.

Для создания мобильных приложений, которые вы сможете перенести в среду Windows NT или аналогичную среду, поддерживающую программный интерфейс Windows, следует пользоваться не стандартными типами данных, реализованными в конкретной версии системы, а теми типами данных, которые определены в файле windows.h.

Этот файл содержит описание базовых типов и производных, созданных из базовых. Имена типов (как правило, это указатели) могут начинаться с префикса. Префикс LP означает дальний указатель (Long Pointer), префикс NP - ближний указатель (Near Pointer), и префикс P - указатель без определения типа. Для константных типов данных (определенных с ключевым словом const) после префикса добавляется буква "C", например, LPCSTR.

Приведем список базовых типов данных, определенных в файле windows.h.

Тип данных Определение типа в файле windows.h Описание
BOOL int Булевый (двоичный)
BYTE unsigned char Байт
WORD unsigned short Беззнаковое целое размером 16 бит
DWORD unsigned long Беззнаковое целое размером 32 бит
UINT unsigned int Беззнаковое целое естественного для данной системы размера

Заметим, что в Windows версии 3.1 изменилось определение типа данных WORD по сравнению с версией 3.0. В файле windows.h, предназначенном для разработки приложений Windows версии 3.0, тип данных WORD был определен следующим образом:

typedef unsigned int WORD; // Для Windows версии 3.0!

В обоих случаях (и для версии 3.0, и для версии 3.1) тип данных отображается на беззнаковое целое длиной 16 бит. Но для Windows NT типы данных unsigned int и unsigned short уже не эквивалентны. Использование вместо них типа данных WORD упростит задачу переноса исходных текстов приложений в 32-разрядную среду.

На основе приведенного выше набора базовых типов в файле windows.h определены производные типы, которые являются указателями:


Тип данных Определение типа в файле windows.h Описание
PSTR char NEAR * Ближний указатель на символ типа char
NPSTR char NEAR * Ближний указатель на символ типа char
LPSTR char FAR * Дальний указатель на символ типа char
LPCSTR const char FAR * Константный дальний указатель на символ типа char
PBYTE BYTE NEAR * Ближний указатель на байт
LPBYTE BYTE FAR * Дальний указатель на байт
PINT int NEAR * Ближний указатель на int
LPINT int FAR * Дальний указатель на int
PWORD WORD NEAR * Ближний указатель на беззнаковое целое размером 16 бит
LPWORD WORD FAR * Дальний указатель на беззнаковое целое размером 16 бит
PLONG long NEAR * Ближний указатель на знаковое целое размером 32 бит
LPLONG long FAR * Дальний указатель на знаковое целое размером 32 бит
PDWORD DWORD NEAR * Ближний указатель на беззнаковое целое размером 32 бит
LPDWORD DWORD FAR * Дальний указатель на беззнаковое целое размером 32 бит
LPVOID void FAR * Дальний указатель, для которого не определен тип данных
Файл windows.h содержит определения для многочисленных структур данных, таких, как POINT, RECT, TEXTMETRICS и т. п. Для всех структур данных определены указатели, например:

typedef struct tagPOINT { int x; int y; } POINT; typedef POINT* PPOINT; typedef POINT NEAR* NPPOINT; typedef POINT FAR* LPPOINT;

Тип данных PPOINT в зависимости от используемой модели памяти может быть как дальним, так и ближним указателем. Поэтому, для того чтобы избежать неоднозначность в тех случаях, когда вам нужен, например, дальний указатель, лучше воспользоваться типом LPPOINT.

Мы не будем перечислять все структуры данных, описанные в файле windows.h, так как их очень много. Вы можете посмотреть определения нужных вам структур непосредственно в файле windows.h, который всегда находится в каталоге с именем include.

Еще один важный тип данных, определенный в файле windows.h, - это различные идентификаторы (handle).

Для использования того или иного ресурса Windows вы должны получить идентификатор нужного вам ресурса.


Для получения идентификатора вызывается одна из функций программного интерфейса Windows. Например, для получения идентификатора контекста отображения можно воспользоваться функцией GetDC:

HDC hdc; hdc = GetDC(hwnd);

Само по себе полученное значение идентификатора не имеет для вас никакого смысла. Идентификатор должен использоваться только для ссылки на ресурс, например:

DrawText(hdc, (LPSTR)szBuf, nBufSize, &rc, DT_CENTER | DT_VCENTER | DT_NOCLIP | DT_SINGLELINE);

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

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

ReleaseDC(hwnd, hdc);

Приведем список некоторых типов идентификаторов ресурсов:

Тип идентификатора Описание
GLOBALHANDLE Идентификатор блока глобальной памяти
HACCEL Акселератор
HBITMAP Изображение в виде битового образа (bitmap)
HBRUSH Кисть
HCURSOR Курсор
HDC Контекст устройства
HDRVR Драйвер устройства
HFONT Шрифт
HGDIOBJ Объект графического интерфейса GDI
HGLOBAL Идентификатор блока глобальной памяти
HICON Пиктограмма
HLOCAL Идентификатор блока локальной памяти
HMENU Меню
HMETAFILE Метафайл
HPALETTE Палитра
HPEN Перо
HRGN Область
HRSRC Ресурс
HSTR Строка символов
HTASK Задача
HWND Окно
LOCALHANDLE Идентификатор блока локальной памяти
С некоторыми перечисленными выше идентификаторами вы уже знакомы, с некоторыми вам еще только предстоит познакомиться в следующих томах "Библиотеки системного программиста".


Содержание раздела