Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
14.02.2015
Размер:
641.54 Кб
Скачать

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

Несколько других идентификаторов в HELLOWIN.C являются новыми типами данных; они также определяются в заголовочных файлах с помощью либо инструкций typedef, либо инструкций#define. Это изначально сделано для облегчения перевода программ для Windows на другую платформу. Иногда эти новые типы данных вполне условны. Например, тип данных UINT, использованный в качестве второго параметраWndProc— это просто беззнаковое целое, которое в Windows является 32-разрядным. Тип данных PSTR, использованный в качестве третьего параметраWinMain, является указателем на строку символов, т. е.char*. Другие имена имеют историческое происхождене. Например, третий и четвертый параметрыWndProcопределяются как WPARAM и LPARAM соответственно. ФункцияWndProcвозвращает значение типа LRESULT. Оно определено просто как LONG. ФункцияWinMainполучает тип WINAPI (как и любая другая функция Windows, которая определяется в заголовочных файлах), а функцияWndProcполучает тип CALLBACK. Оба эти идентификатора определяются как stdcall, что является ссылкой на особую последовательность вызовов функций, которая имеет место между самой операционной системой Windows и ее приложением.

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

Структура

Значение

MSG

Структура сообщения

WNDCLASSEX

Структура класса окна

PAINTSTRUCT

Структура рисования

RECT

Структура прямоугольника

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

Описатели

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

Идентификатор

Значение

HINSTANCE

Описатель экземпляра (instance) самой программы

HWND

Описатель окна

HDC

Описатель контекста устройства

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

Венгерская нотация

Некоторые переменные в HELLOWIN.С имеют своеобразные имена. Например, имя szCmdLine— параметрWinMain. Это соглашение по именованию переменных, названные условно Венгерской нотацией. Имя переменной начинается со строчных буквы или букв, которые отмечают тип данных переменной. Например, префиксszвszCmdLineозначает, что строка завершается нулем (string terminated by zero). ПрефиксhвhInstanceиhPrevInstanceозначает описатель (handle); префиксiвiCmdShowозначает целое (integer).

При обозначении переменных структуры удобно пользоваться именем самой структуры (или аббревиатурой имени структуры) и строчными буквами, используя их либо в качестве префикса имени переменной, либо как имя переменной в целом. Например, в функции WinMainв HELLOWIN.С переменнаяmsgотносится к структуре типа MSG;wndclass— к структуре типа WNDCLASSEX. В функцииWndProc, переменнаяpsотносится к структуре PAINTSTRUCT,rect— к RECT.

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

В таблице представлены общепринятые префиксы переменных:

Префикс

Тип данных

c

символ

by

BYTE (беззнаковый символ)

n

короткое целое

i

целое

x, y

целое (используется в качестве координат xиy)

cx, cy

целое (используется в качестве длины xиy),созначает "счет" — (count)

b или f

BOOL (булево целое); f означает "флаг" — (flag)

w

WORD (беззнаковое короткое целое)

l

LONG (длинное целое)

dw

DWORD (беззнаковое длинное целое)

fn

функция

s

строка

sz

строка, завершаемая нулем

h

описатель (handle)

p

указатель (pointer)