Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Компоненты библиотеки 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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал