Шпаргалка Windows API. Объекты user и gdi

Интерактивный офлайновый справочник по основным функциям, структурам и константам Windows API, снабженный большим количеством примеров. Полезен всем программистам пишущим под Windows с использованием Windows API.

«Очередная книга по Windows API» — подумаете вы, взглянув на заголовок и… ошибетесь. Да, по Windows API написано немало книг как зарубежными, так и отечественными авторами. Но ими не всегда удобно пользоваться. Формат книги очень ограничен. Авторы просто физически не могут описать всё многообразие Windows API и привести достаточное количество примеров. Поэтому они сосредотачиваются на наиболее важных с их точки зрения моментах, не охватывая всего многообразия Windows API.

В итоге читатель, заплатив немалые деньги за книгу (а книги нынче стоят дорого) получает лишь малую часть той информации, на которую вправе рассчитывать за такие деньги. Более того печатная книга неудобна в использовании. Она занимает много места, ее нельзя постоянно держать при себе и на разных рабочих местах, в ней не всегда удобно искать нужную информацию. Да, есть Интернет. Но он тоже не панацея.

Во-первых, он есть не везде. И речь вовсе не о глухих деревнях. Например, если вы работаете на оборонном предприятии, то у вас просто может не быть выхода в Сеть по соображениям безопасности.

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

В-третьих, в Интернете не всегда можно быстро найти нужную информацию. Если у вас типовой вопрос, с которым сталкиваются миллионы, то да, скорее всего вам повезет. А если нет? В качестве примера попробуйте найти в интернете наглядный пример использования функции CallWindowProc. Это документированная функция, и она описана в msdn. В свое время у меня на это ушел не один час. Единственное упоминание о том, как использовать эту функцию я нашел в статье Раймонда Чена (Raymond Chen).

В-четвертых, много ценной информации в Интернете доступно только на английском языке. Я помню, когда Microsoft объявила о переводе msdn на русский язык, это был чуть ли не праздник. Только потом весь ажиотаж быстро сошел на нет. Почему? Потому что перевели не всё, и не то, что хотелось бы в первую очередь. Если сейчас заглянуть на msdn, то легко увидеть, что документация практически по всем функциям Windows API доступна только на английском языке. Если он для вас — второй родной, то нет проблем, а если с ним не сложилось? Да, в интернете можно найти переводы статей, но они так же не пестрят примерами. Да и переведено далеко не всё.

Осознав все эти проблемы, я сел за составление «Шпаргалки Windows API». Что это такое? Это интерактивный офлайновый справочник по функциям, структурам, константам, макросам, типам данных Windows API. По сути это файл формата chm, в котором представлено описание Windows API. Работа оказалась настолько большой, что исходный файл пришлось разбивать на несколько томов. Сегодня вашему вниманию представляется том «объекты user и gdi». Он состоит из 27 разделов.

«Диалоговые окна» — функции, относящиеся к диалоговым окнам (CreateDialog, DialogBox, EndDialog и др.).
 «Другие» — функции, не попавшие в другие разделы (DragFinish, GdiFlush, GetObject и др.).
 «Иконка» — функции работы с иконками (CreateIcon, DrawIcon, LoadIcon и др.).
 «Интерактивное взаимодействие с пользователем» — функции MessageBeep, MessageBox и др.
«Кисть» — функции работы с кистью (CreateBrushIndirect, CreatePatternBrush, GetBrushOrgEx и др.).
«Клавиатура» — функции работы с клавиатурой (GetKeyState, SendInput и др.).
 «Константы» — константы Windows API (коды виртуальных клавиш, параметры функции BitBlt, семейства шрифтов, стили кисти, стили оконного класса и др.). Свыше 1500 констант.
 «Контекст устройства» — функции работы с контекстом устройства (CreateCompatibleDC, GetDC, SelectObject и др.).
 «Курсор мыши» — функции работы с курсором мыши (CopyCursor, GetCursor, LoadCursor и др.).
 «Меню» — функции работы с меню, в том числе контекстным (CreateMenu, CreatePopupMenu, TrackPopupMenu и др.).
 «Обработка ошибок» — функции GetLastError, SetLastError и SetLastErrorEx.
 «Окно» — функции работы с окнами (AnimateWindow, CloseWindow, CreateWindow, FindWindow, GetWindow и др.).
 «Оконный класс» — функции работы с оконными классами (GetClassInfo, GetClassLong, RegisterClass и др.).
 «Описание ресурсов и элементов управления» — описывается синтаксис объявления ресурсов в rc файлах. Всего 45 элементов, в том числе иконки, шаблоны диалоговых окон, шаблоны меню, элементы управления, шрифты и др.
 «Перо» — функции работы с пером (CreatePen, CreatePenIndirect, ExtCreatePen, GetDCPenColor и SetDCPenColor).
 «Примеры» — примеры программ, использующих описываемые в шпаргалке функции Windows API. Свыше 100 законченных приложений. Для каждого примера приводится полный исходный код, включая содержимое заголовочных файлов и файлов ресурсов (там, где они используются). Дополнительно к комментариям в коде программ примеры предваряются словесным описанием того, как она работает и как решает поставленную перед ней задачу. Примеры решаемых задач:создание диалоговых окон различными способами;
использование функции DefDlgProc;
подготовка окна и реализация графики OpenGL в том числе анимации;
передача информации с помощью сообщения WM_COPYDATA;
реализация окна, имеющего элементы управления, динамически подстраивающиеся под его размер;
отображение растрового изображения на поверхности окна различными способами, в том числе с помощью формата DIB;
реализация окна, дочерний элемент управления которого можно перетаскивать мышью;
реализация окна, на поверхность которого можно перетаскивать файлы;
рисование различных графических элементов средствами gdi;
создание скриншота экрана средствами Windows API и сохранение его в файл BMP;
создание кнопки, на поверхности которой отображается надпись и иконка (приводится два способа решения этой задачи, в том числе с помощью функции CallWindowProc);
другие задачи.
Все примеры писались на языке C++. В качестве среды разработки использовался Dev-C++. Я старался не использовать синтаксические конструкции специфические для этой среды разработки, поэтому адаптация примеров для другой IDE не должна вызвать особых трудностей.

Примеры в этом разделе являются дополнением к примерам, приводимым в описаниях функций.
 «Прямоугольная область» — функции работы с прямоугольниками (CopyRect, GetClientRect, UnionRect и др.).
 «Растровое изображение» — функции работы с изображениями и битовыми картами (BitBlt, CreateBitmap, CreateDIBSection, MaskBlt и др.).
 «Ресурсы» — функции работы с ресурсами (CopyImage, EnumResourceLanguages, FindResource и др.).
 «Рисование» — функции рисования средствами gdi (Chord, Ellipse, GradientFill, PolyPolygon и др.).
 «Сообщение» — функции работы с оконными сообщениями (DispatchMessage, GetMessage, ReplyMessage и др.).
 «Строка» — функции работы со строками (CharNext, CharToOem, CompareString и др.).
 «Структуры» — описание свыше 100 структур (BITMAPINFO, DIBSECTION, DLGTEMPLATE, ICONINFO, LOGFONT, LOGPEN и др.).
 «Таймер» — функции работы с таймером пользовательского режима (KillTimer и SetTimer).
 «Функции обратного вызова» — функции, реализуемые пользователем и вызываемые системой (DialogProc, EnumFontFamProc, MsgBoxCallback, TimerProc, оконная процедура и др.).
 «Шрифт и текст» — функции работы со шрифтами и вывода текста на поверхность окна (CreateFont, DrawText, PolyTextOut и др.).
 «Элементы управления» — функции работы с элементами управления (CheckDlgButton, GetDlgItemText, IsDlgButtonChecked и др.).

Структура тома наглядно демонстрируется в видеоролике.

В общей сложности вы получаете:

 описание более 400 функций,
 описание более 100 структур,
 описание более 1500 констант,
 более 100 законченных примеров.
Такой насыщенностью информацией по Windows API не может похвастаться ни одна книга. Дополнительно данный проект имеет следующие преимущества.

 Файл имеет небольшой размер (чуть меньше 3 мегабайт), не занимает много места и уместится на любой, даже забитой «под завязку» флешке.
 Нет никаких DRM. Благодаря этому вы можете легко копировать его на все свои компьютеры. Он всегда будет находиться у вас под рукой, где бы вы не находились.
 Благодаря гипертекстовой структуре файла (формат chm), навигация в нем не представляет никаких проблем. Вы всегда можете легко и быстро находить в нем нужную вам информацию.
 Нет никакой рекламы, надоедливых напоминаний и каких-либо ограничений. Только конкретная информация. Ничего лишнего.
 Файл имеет стандартный формат chm. Для его чтения не нужно никаких дополнительных программ. Система Windows поддерживает его без каких-либо дополнений. Поэтому вы можете использовать его даже там, где у вас нет прав администратора вне зависимости от версии операционной системы и новизны аппаратного обеспечения.
 Все ссылки в файле являются внутренними. Поэтому вы можете свободно использовать его даже там, где нет выхода в Интернет.
К сожалению, в этот том не входит несколько важных тем. Среди них: регионы, ускорители, стандартные диалоговые окна (окно открытия и сохранения файлов, выбора цвета и др.), хуки. Недостаточно подробно рассмотрены темы: передача информации посредством механизма DDE, разработка многодокументных приложений (MDI).

Я не стал включать их по двум причинам. Во-первых, работа над шпаргалкой и так слишком затянулась. Рассмотрение этих тем отсрочило бы релиз. Во-вторых, нет уверенности в наличии спроса со стороны читателей. Я работаю не только для себя, но и для своих читателей.

У меня много идей различных проектов и приходится выбирать — над какими работать, а какие откладывать в сторону. Платность данного тома прошу воспринимать не как мою жадность, а как своеобразный «сбор средств» на развитие идеи «шпаргалка Windows API».

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

УЗНАТЬ ПОДРОБНЕЕ

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *