Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Компоненты библиотеки Win32 API
Библиотека Win32 API содержит более двух тысяч функций, которые позволяют организовать взаимодействие ОС Windows и приложения [16–18]. Кроме того, библиотека включает в себя большое количество типов данных, многие из которых представляют собой переопределение стандартных типов данных языков C и C++, например, тип DWORD означает беззнаковое целое 32-битное число, или синоним типа unsigned long. Кроме простых типов, в библиотеку включены несколько типов структур, например, структура сообщения MSG. Поскольку программы в Windows управляются сообщениями, в библиотеку включены идентификаторы сообщений. Библиотека подключается с помощью заголовочного файла windows.h.
Венгерская нотация
Нотация – это форма записи идентификаторов. Венгерская нотация предложена программистом фирмы Microsoft, одним из разработчиков ОС Windows Карлом Симони. Традиционно используется для Windows-программ, в том числе для обозначений идентификаторов в библиотеке Win32 API. Венгерская нотация позволяет сделать программу более понятной и уменьшить объем комментариев за счет применения «говорящих» идентификаторов. Чтобы применить венгерскую нотацию, надо при задании идентификаторов использовать несколько несложных правил.
Правило 1. Идентификаторы следует начинать с префикса, который обозначает тип переменной и/или ее назначение. Префикс записывается с помощью строчных символов:
Префикс
| Тип переменной
| c
| char
| by
| BYTE
| i
| int
| x, y
| short, координаты
| cx, cy
| short, счетчик (c – count)
| b
| BOOL (int)
| w
| WORD (unsigned short)
| l
| LONG (long)
| dw
| DWORD (unsigned long)
| fn
| функция
| p
| указатель
| s
| строка
| sz
| строка, завершающаяся символом 0 (ASCIIZ-строка)
| Правило 2. Идентификатор может быть составлен из нескольких слов, при этом каждое слово начинается с прописной буквы, остальные буквы – строчные:
lpszMenuName длинный указатель на ASCIIZ-строку, содержащую имя меню,
lpfnWndProc длинный указатель на функцию WndProc() – оконную процедуру (Window Procedure).
Правило 3. Типы переменных (структур, классов и др.) записываются прописными буквами, а имена переменных, объектов – строчными:
MSG msg; //объявление структурной переменной,
HWND hwnd; //объявление дескриптора.
Примеры типов данных, определенных в Win32 API
BOOL, BOOLEAN
| Логический тип (TRUE, FALSE)
| CHAR
| Символ (8 бит) в кодировке ANSI Windows
| SHORT
| Целое знаковое число (16 бит)
| INT, LONG
| Целое знаковое число (32 бита)
| FLOAT
| Вещественное число с плавающей точкой
| INT64, LONG64, LONGLONG
| Целое знаковое число (64 бита)
| WORD, ATOM
| Целое беззнаковое число (16 бит)
| UINT, DWORD
| Целое беззнаковое число (32 бита)
| VOID
| Пустой тип
| WCHAR
| Символ (16 бит) в кодировке Unicode
| TCHAR
| CHAR или WCHAR (если в программе
установлен макрос UNICODE)
| LPCSTR
| Длинный указатель (32 бита) на константную строку 8-битных символов
| LPSTR
| Длинный указатель (32 бита) на строку 8-битных символов
| LPCTSTR
| Длинный указатель (32 бита) на константную строку символов TCHAR
| LPTSTR
| Длинный указатель (32 бита) на строку символов TCHAR
| CALLBACK
| Функция обратного вызова: это обычная функция, адрес которой будет передан операционной системе для того, чтобы операционная система, а не приложение, осуществляла вызов функции
| LRESULT
| Знаковое целое
| Windows запрещает приложениям прямой доступ к своим объектам – окнам, меню, устройствам. Получить доступ к таким объектам приложение может с помощью специальных указателей на объекты, называемых дескрипторами. Существует еще одно название дескриптора – хэндл, от английского слова handle, которое можно перевести как средство управления, манипулирования. Дескриптор – это переменная, которая хранит некоторое числовое значение, ассоциированное с конкретным объектом. Ее значение не может быть получено или изменено пользователем, но оно известно операционной системе и может быть передано функциям Win32 API для доступа к соответствующему объекту.
Тип дескриптора записывается в соответствии с правилами венгерской нотации прописными буквами, начинается с префикса H и включает в себя имя объекта (табл. 20.1).
Структуры в Win32 API используются для описания основных объектов в Windows: окон, сообщений, графических объектов (табл. 20.2).
Таблица 20.1
Типы данных
| Тип дескриптора
| HANDLE
| Дескриптор какого-либо объекта
| HBITMAP
| Дескриптор растрового рисунка (изображения)
| HBRUSH
| Дескриптор кисти
| HCURSOR
| Дескриптор курсора
| HDC
| Дескриптор контекста устройства
| HICON
| Дескриптор иконки
| HINSTANCE
| Дескриптор приложения
| HMENU
| Дескриптор меню
| HPEN
| Дескриптор пера
| HWND
| Дескриптор окна
| Таблица 20.2
Структура
| Описание
| WNDCLASS,
WNDCLASSEX
| Определяют оконный класс (имя класса окна, приложение, использующее окно, адрес оконной процедуры, атрибуты окна, курсор, иконки, меню)
| MSG
| Содержит информацию сообщения из очереди сообщений
| PAINTSTRUCT
| Содержит информацию для перерисовки окна
| POINT
| Содержит координаты точки x и y
| RECT
| Определят координаты и размеры рямоугольника
| BITMAP
| Определяет тип, ширину, высоту, цветной формат и данные растрового рисунка (файл типа bmp)
| Эти структуры объявлены в Win32 API следующим образом:
Структура POINT
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT;
Структура RECT
typedef tagRECT
{
LONG left; //x – координата левого верхнего угла
LONG top; //y – координата левого верхнего угла
LONG right; //x – координата правого нижнего угла
LONG bottom; //y – координата правого нижнего угла
} RECT;
Структура BITMAP
typedef struct tagBITMAP
{
LONG bmType; //всегда 0
LONG bmWidth; //ширина рисунка в пикселях
LONG bmHeight; //высота рисунка в пикселях
LONG bmWidthBytes; //число байтов в строке
//развертки
WORD bmPlanes; //количество цветовых плоскостей
WORD bmBitsPixel; //число битов на пиксель
LPVOID bmBits; //байтовый массив изображения
} BITMAP;
Структура PAINTSTRUCT
typedef struct tagPAINTSTRUCT
{
HDC hdc; //дескриптор контекста устройства
BOOL fErase; //TRUE – фон должен быть стерт
RECT rcPaint; //координаты закрашиваемой области
BOOL fRestore; //для внутреннего использования
BOOL fIncUpdate; //для внутреннего использования
BYTE rgbReserved[32]; //зарезервировано
} PAINTSTRUCT;
Структура MSG
typedef struct tagMSG
{
HWND hwnd; //дескриптор окна адресата
UINT msg; //идентификатор (номер) сообщения
WPARAM wParam; //первый параметр сообщения
LPARAM lParam; //второй параметр сообщения
DWORD time; //время регистрации сообщения
POINT pt; //координаты курсора при регистрации
//сообщения
} MSG;
Сообщения – это информация о каком-либо происшествии в системе. Сообщение направляется приложению или окну приложения, которое в ответ должно выполнить некоторые действия. В программе сообщение представлено структурой типа MSG. Информация, помещаемая в структуру, зависит от типа сообщения. Тип сообщения зависит от источника сообщения и задается с помощью идентификатора (номера) сообщения (табл. 20.3).
Таблица 20.3
Сообщение Windows
| Описание
| WM_PAINT
| Возникает при изменении размеров или положения окна на экране, при перекрытии окон, при изменении информации, отображаемой окном; вызывает перерисовку окна или его части
| WM_COMMAND
| Посылается от стандартного элемента управления (например, кнопки) или от элемента меню родительскому окну, возникает при нажатии на кнопку или при выборе пользователем пункта меню
| WM_SYSCOMMAND
| Посылается при выборе команды системного меню окна или одной из кнопок управления окном (кнопки свертывания, развертывания, восстановления или закрытия окна)
| WM_CHAR
| Возникает при нажатии клавиши на клавиатуре
| WM_DESTROY
| Возникает, когда пользователь завершает работу приложения; посылается окну приложения для его разрушения и одновременно направляется оконной процедуре, минуя очередь сообщений; обработка сообщения должна предусматривать добавление в очередь сообщений приложения сообщения MW_QUIT, завершающего цикл обработки сообщений приложения
| WM_QUIT
| Посылается приложению при его завершении; это единственное сообщение, завершающее цикл обработки сообщений приложения
| Таблица 20.4
Функции библиотеки Win32 API
| Прототип
| Описание
| RegisterClassEx()
| ATOM RegisterClassEx(//буфер оконного //класса
CONST WNDCLASSEX *lpwcx);
| Регистрация расширенного класса главного окна в системе; возвращает числовое значение, однозначно идентифицирующее зарегистрированный класс
|
RegisterClass()
| ATOM RegisterClass(//буфер оконного //класса CONST WNDCLASS *lpwndClass);
| Регистрация класса главного окна в системе; возвращает числовое значение, однозначно идентифицирующее зарегистрированный класс
| CreateWindowEx()
| HWND CreateWindowEx(//дополнит. //атрибуты окна DWORD dwExStyle, //имя оконного //класса LPCTSTR lpClassName, //имя окна LPCTSTR lpWindowName, //атрибуты окна DWORD dwStyle, //горизонтальная //позиция окна int x, //вертикальная //позиция окна int y, //ширина окна int nWidth, //высота окна int nHeight, //дескриптор //родительского //окна HWND hWndParent, //дескриптор меню HMENU hMenu, //дескриптор //приложения HINSTANCE hInstance, //доп. данные окна LPVOID lpParam);
| Создание расширенного окна любого типа (главное окно, кнопка, статическое поле, окно редактирования и т. д.); стандартные оконные классы: " BUTTON" – кнопка, " STATIC" – статический текст, " EDIT" – окно
редактирования, " LISTBOX" – список;
атрибуты окна:
WS_BORDER – окно
с тонкой рамкой, WS_CAPTION – окно
с тонкой рамкой и
заголовком, WS_OWERLAPPEDWINDOW – окно с рамкой,
заголовком, системным меню
| CreateWindow()
| HWND CreateWindow(//имя оконного //класса LPCTSTR lpClassName, //имя окна LPCTSTR lpWindowName, //атрибуты окна DWORD dwStyle, //горизонтальная //позиция окна int x, //вертикальная //позиция окна int y, //ширина окна int nWidth, //высота окна int nHeight, //дескриптор //родительского //окна HWND hWndParent, // дескриптор меню HMENU hMenu, //дескриптор //приложения HINSTANCE hInstance, //доп. данные окна LPVOID lpParam);
| Создание окна любого типа (главное окно, кнопка,
статическое поле, окно
редактирования и т. д.);
стандартные оконные классы: " BUTTON" – кнопка, " STATIC" – статический текст, " EDIT" – окно
редактирования, " LISTBOX" – список;
атрибуты окна: WS_BORDER – окно с тонкой рамкой, WS_CAPTION – окно
с тонкой рамкой и
заголовком, WS_OWERLAPPEDWINDOW – окно с рамкой,
заголовком, системным меню
| ShowWindow()
| BOOL ShowWindow(//дескриптор окна- //владельца HWND hwnd, //параметры ото//бражения int nCmdShow);
| Устанавливает состояние отображаемого окна; hwnd – дескриптор окна, nCmdShow – состояние окна (SW_SHOWNORMAL – нормальное отображение, размеры окна по умолчанию; SW_MAXIMIZE – окно во весь экран)
| UpdateWindow()
| BOOL UpdateWindow(
//дескриптор //обновляемого //окна;
HWND hwnd);
| Обновляет рабочую область окна, посылая сообщение WM_PAINT; при нормальном завершении возвращает 0
| GetMessage()
| GetMessage(//буфер для //сообщения LPMSG lpMsg, //дескриптор //окна-адресата HWND hwnd, //первое сообщение UINT wMsgFilterMin, //второе сообщение, UINT wMsgFilterMax);
| Чтение сообщения из очереди сообщений и размещение информации сообщения в структуре типа MSG; возвращает значение 0, если получено сообщение WM_QUIT, и ненулевое значение при получении любого другого сообщения; параметры типа UINT позволяют фильтровать сообщения, нулевые значения этих параметров означают отсутствие фильтрации сообщений
| TranslateMessage()
| BOOL TranslateMessage(//информация //сообщения CONST MSG *lpmsg);
| Переводит сообщения от виртуальных клавиш в символьные сообщения
| DispatchMessage()
| LRESULT DispatchMessage(//информация //сообщения CONST MSG *lpmsg);
| Посылает сообщение оконной процедуре; возвращает значение, полученное после завершения работы оконной процедуры
| MessageBox()
| int MessageBox(//дескриптор окна- //владельца HWND hwnd, //текст сообщения LPCTSTR lpText, //заголовок окна LPCTSTR lpCaption, //стиль окна UINT uType);
| Создает и отображает окно сообщений: текст сообщения, заголовок и набор кнопок, задаваемый последним параметром; возвращаемое значение – номер выбранной при закрытии окна кнопки (константы IDOK,
IDCANCEL, IDNO и т. д.)
| DefWindowProc()
| LRESULT DefWindowProc(//дескриптор окна HWND hwnd, //номер сообщения UINT imsg, //параметр //сообщения WPARAM wParam, //параметр //сообщения LPARAM lParam);
| Выполняет обработку сообщений главного окна по умолчанию
| PostQuitMessage()
| VOID PostQuitMessage
(int nExitCode);
| Вставляет в цикл обработки сообщений приложения сообщение WM_QUIT, nExitCode – значение, используемое в качестве параметра wParam сообщения WM_QUIT, обычно равно 0
|
|