Типы данных в файле 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 * | Дальний указатель, для которого не определен тип данных |
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 | Идентификатор блока локальной памяти |