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

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

До настоящего времени указывались только имена API функций, без их параметров. Далее нам нужно будет ознакомиться с некоторыми структурами данных, и здесь возникает одна трудность для понимания – текст Windows приложения выглядит необычно для человека, знакомого с языком С, но не владеющего Windows программированием. В частности, не видно знакомых типов данных, а многосимвольные имена объектов более напоминают Pascal программу. Дело в том, что, действительно, Pascal был выбран стартовым языком для разработки Windows, в следствие его жесткой типитизированности данных. Но ограниченность языка Pascal заставила разработчиков перейти на использование более мощного языка С, однако влияние Pascal, в качестве развернутой мнемоники имен переменных, на стиль Windows программирования осталось.

В конце 80-х годов программист фирмы Microsoft Чарльз Симонаи пошел далее, включив тип переменной в ее имя. Было несколько странно встретить примерно такую строку: WORD wBufferSize. Однако в этом случае имя переменной говорит и о ее предназначении, и о ее типе. Следовательно, становится возможным обнаружить алгоритмические ошибки еще до компиляции программы. Такая техника завоевала популярность в среде Windows разработчиков и в честь ее автора – венгра по национальности – была названа венгерской нотацией.

В таблице приведены некоторые типы данных и префиксы, используемые в Windows программировании.

Тип данных

Истинный тип

Префикс

Комментарий

BOOL

int

f

Boolean TRUE or FALSE

BYTE

unsigned char

b

Тип данных Byte

LPBYTE

BYTE FAR*

lpb

Дальний указатель на Byte

CHAR

char

ch

Windows символ

DWORD

unsigned long

dw

Тип данных двойное слово

LPDWORD

DWORD FAR*

lpdw

Дальний указатель на двойное слово

HANDLE

void*

h

Дескриптор объекта

LPHANDLE

void**

lph

Дальний указатель на дескриптор объекта

HBITMAP

void*

hbm

Дескриптор BitMap

HBRUSH

void*

hbr

Дескриптор кисти

HDC

void*

hdc

Дескриптор контекста устройства

HFILE

int

hf

Дескриптор файла

HGDIOBJ

void*

hgdiobj

Дескриптор GDI объекта

HINSTANCE

void*

hinst

Дескриптор экземпляра приложения

HWND

void*

hwnd

Дескриптор окна

INT

int

n

Тип данных int

LPINT

int FAR*

lpn

Дальний указатель на INT

LONG

long

l

32-х разрядное значение

LPLONG

long FAR*

lpl

Дальний указатель на LONG

LPARAM

LONG

lParam

Параметр сообщения типа LONG

WPARAM

unsigned int

wParam

Параметр сообщения типа UINT

LPCSTR

const char*

lpsz, sz

Константная строка в стиле языка С

LPSTR

char*

lpsz, sz

Строка языка С

LRESULT

LONG

lResult

Возвращаемое значение типа LONG

TCHAR

-

ch

Unicode или Windows символ

UINT

unsigned int

u

Беззнаковое целое

ULONG

unsigned long

ul

Беззнаковое 32-х разрядное значение

USHORT

unsigned short

w

Беззнаковое 16-ти разрядное значение

VOID

void

v

Объект без типа

LPVOID

void*

lpv

Дальний указатель на VOID

WORD

unsigned short

w

Тип данных “слово”

LPWORD

unsigned short FAR*

lpw

Дальний указатель на WORD

Взглянув на таблицу, можно увидеть, что для Win32 типы данных LONG и INT эквивалентны и, конечно же, вместо них можно использовать обычный С тип данных int. Но как будут обстоять дела в Win64, которая уже “не за горами”? Использование Windows типов предпочтительнее, поскольку это потребует только перекомпилирования приложения, а не переписывания его, при переходе на другую платформу.