«Очередная книга по 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 разделов.

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

    Все примеры писались на языке C++. В качестве среды разработки использовался Dev-C++. Я старался не использовать синтаксические конструкции специфические для этой среды разработки, поэтому адаптация примеров для другой IDE не должна вызвать особых трудностей.

    Примеры в этом разделе являются дополнением к примерам, приводимым в описаниях функций.

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

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

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

  •  описание более 400 функций,
  •  описание более 100 структур,
  •  описание более 1500 констант,
  •  более 100 законченных примеров.

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

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

К сожалению, в этот том не входит несколько важных тем. Среди них: регионы, ускорители, стандартные диалоговые окна (окно открытия и сохранения файлов, выбора цвета и др.), хуки. Недостаточно подробно рассмотрены темы: передача информации посредством механизма DDE, разработка многодокументных приложений (MDI).

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

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

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

Шпаргалка продается по цене, значительно ниже своей реальной ценности. Всего 500 рублей.

 

Купить