// ------------------------------------------------------------------- //
//                           Библиотеки Win32 API                      //
//                           для Sphinx C-- 0.229+                     //
// ------------------------------------------------------------------- //

   С ЧЕГО ВСЕ НАЧАЛОСЬ

   ...Взявшись за программирование на C-- под Windows, я натолкнулся на
отсутствие библиотек, удовлетворяющих моим запросам. Вот так и пришлось
прежде написания программ взяться за разработку этих библиотек.
   Этот пакет был написан на основе аналогов, взятых из Borland Delphi и
C++ Builder. Из исходных текстов были исключены малоиспользуемые на практике
структуры и константы. Вполне возможно, в последующих версиях библиотеки
будут расширены и дополнены.
   Несмотря на значительное уменьшение объема исходного кода по сравнению с
аналогами C++, библиотеки все еще слишком велики для версии компилятора C--
под DOS. Например, на компиляцию WINUSER.H-- уже не хватает памяти. Впрочем,
это можно легко обойти, воспользовавшись версией компилятора C--32 под
консольный режим Windows. Я не вижу в этом большой проблемы: раз вы взялись
программировать под Windows - используйте компилятор под Windows.

   Библиотеки Win32 API, реализованные для C++ Builder и C-- 0.229,
подключаются следующим образом: сначала объявляются константы, а затем
подключается один файл:
   #define _WINBASE_ TRUE
   #define _WINGDI_ TRUE
   #include "windows.h--"
Мне же больше нравится способ подключения нескольких файлов:
   #include "winbase.h--"
   #include "wingdi.h--"
   #include "winuser.h--"
Прежний способ по-прежнему поддерживается и будет поддерживаться. Файл
WINDOWS.H-- существует именно для обеспечения совместимости с этим способом.

// ------------------------------------------------------------------- //

   ЧТО УЖЕ СДЕЛАНО

   Данная реализация включает в себя следующие файлы:
   ADVAPI   H--   Работа с реестром
   CCANIM   H--   Сервисные функции для анимации
   CCHEADER H--   Сервисные функции для разделителей
   CCLIST   H--   Сервисные функции для списков
   CCPRSHT  H--   Сервисные функции для многостраничных панелей
   CCTAB    H--   Сервисные функции для закладок
   CCTREE   H--   Сервисные функции для деревьев
   COMMCTRL H--   Списки, деревья, прогрессы, закладки, строки состояния...
   COMMDLG  H--   Диалоги открытия файла, сохранения, печати, поиска.
   LZEXPAND H--   Распаковка файлов, запакованных COMPRESS.EXE
   SHELLAPI H--   Работа с трэйем, drag&drop, документами...
   STRING32 H--   Классические функции работы со строками под Win32
   WINBASE  H--   Работа с памятью, файлами, DLL, консолью, строками...
   WINDEF   H--   Основные объявления типов, структур и макросов
   WINDOWS  H--   Служит для совместимости на уровне исходных текстов
   WINERROR H--   Коды ошибок Windows
   WINGDI   H--   Работа с контекстами устройств, графикой и шрифтами
   WINUSER  H--   События, сообщения, ресурсы и прочий интерфейс
   README32 TXT   Этот файл
   STRING32 TXT   Описание функций STRING32.H--

   Теперь несколько поподробнее обо всех этих файлах. Сразу скажу, что у
меня нет ни малейшего желания описывать ВСЕ или хотя бы некоторые функции
Win32 API. Ради изучения механизма программирования под Windows я могу лишь
посоветовать прочитать пару хороших книг, а в качестве справочного "on-line"
руководства - небезызвестный MS SDK Help.

   WINDEF.H--
   Содержит описания основных типов данных, констант и структур. Также
описаны некоторые макрокоманды. Вам вряд ли понадобится подключать этот
файл к своей программе явно, так как он будет подключен при использовании
WINDOWS.H-- или WINBASE.H--.

   WINDOWS.H--
   Предназначен для совместимости с "классическим" способом подключения
библиотек. Используя этот файл, вы должны до его подключения объявить
соответствующие константы.

   WINBASE.H--                                   _WINBASE_
   Служит для импорта функций из KERNEL32.DLL, также содержит описания
констант и структур, необходимых для работы с этими функциями. В этой и
во всех остальных библиотеках предпочтение отдано функциям и структурам
для работы с ANSI-строками, UNICODE-функции не реализованы в силу их крайне
редкого применения.
   Функции ядра Windows используются для распределения памяти и прочих
системных ресурсов, управления процессами и потоками, работы с файлами,
и ASCIIZ-строками, загрузки DLL, консольного ввода-вывода... Пожалуй,
любая программа под Windows будет использовать функции этой библиотеки.

   WINGDI.H--                                    _WINGDI_
   Импортирует функции из GDI32.DLL, предначначенные для работы с такими
графическими объектами, как контексты устройств (DC), шрифты (Font),
кисти (Brush), перья (Pen), рисунки (Bitmap, Metafile), а также графическими
примитивами. Функции интерфейса графических устройств (GDI) будут полезны
в первую очередь тем, кто занимается созданием собственных интерфейсных
элементов окна, а также создателям графических демо.

   WINUSER.H--                                   _WINUSER_
   Реализует функции USER32.DLL, которые используются для работы с окнами,
кнопками, меню, текстом, иконками, полями ввода и прочими основными элеметами
диалоговых окон. Также содержит описания функций, структур и констант для
работы с событиями и сообщениями, есть функции для преобразования и
форматирования ASCIIZ-строк. Программы, использующие графический интерфейс
пользователя (GUI), обязательно должны использовать эту библиотеку.
   Три вышеназванные DLL - KERNEL, GDI, USER - составляют базу как и самой
операционной системы Windows, так и любой программы под нее.

   WINERROR.H--                                  _WINERROR_
   Содержит описания констант - кодов ошибок Windows. Библиотека может
быть полезна на стадии отладки программы.

   COMMCTRL.H--                                  _COMMCTRL_
   Содержит импортируемые из COMCTL32.DLL функции, а также описания
структур и констант для сообщений. Используется для создания таких
интерфейсных элементов, как анимация (Animation), различные списки
(Drag List, Image List, List View, Tree View), закладки (Tab Control),
многостраничные диалоги (Property Sheets), строки состояния и прогресса
(Status Bar, Progress Bar), панели инструментов (Toolbar), ползунков
(Trackbar), всплывыающих подсказок (Tooltip), заголовков и разделителей
(Header Control). В целях уменьшения объема выходного кода вспомогательные
сервисные функции, занимающие в сумме около 4K объектного кода, вынесены в
файлы CC*.H--. Если вы не хотите использовать их, вы можете сами посылать
соответствующие сообщения API-функцией SendMessage.

   COMMDLG.H--                                   _COMMDLG_
   Реализует интерфейс с COMDLG32.DLL, используется для работы со
стандартными диалоговыми окнами: открытие файла, сохранение файла,
поиск и замена текста, выбор цвета, выбор шрифта, подготовка к распечатке.

   ADVAPI.H--                                    _ADVAPI_
   Служит для импорта функций из ADVAPI32.DLL, которые применяются для
работы с системным реестром и режимами безопасности и доступа (ACL, ACE,
SID). Если кто-нибудь знает, какую пользу можно извлечь из структур типа
ACL и SID - пишите.

   SHELLAPI.H--                                  _SHELLAPI_
   Импортирует функции из SHELL32.DLL - расширения оболочки. Вы сможете
использовать эту библиотеку для работы с протоколом Drag&Drop, трэйем
панели задач, извлечения иконок из программ и библиотек, открытия документов
и работающих с ними приложений и многого другого.

   LZEXPAND.H--                                  _LZEXPAND_
   Реализует функции LZ32.DLL - библиотеки распаковки данных. Позволяет
распаковывать данные, упакованные программой COMPRESS. Вы можете
использовать эту библиотеку, создав файл с графикой и/или музыкой для
своей демки и затем упаковав его программой COMPRESS.

   STRING32.H--                                  _STRING32_
   Содержит реализацию классических для Си функций обработки ASCIIZ-строк и
просто строк под Win32. Конечно, вы можете вполне обойтись использованием
соответствующих WinAPI функций, но если для вас скорость имеет критическое
значение - эти функции для вас. Для детального описания функций смотрите
файл STRING32.TXT.

   CCANIM.H--                                    _CCANIM_
   CCHEADER.H--                                  _CCHEADER_
   CCLIST.H--                                    _CCLIST_
   CCPRSHT.H--                                   _CCPRSHT_
   CCTAB.H--                                     _CCTAB_
   CCTREE.H--                                    _CCTREE_
   Содержит описание сервисных функций для следующих интерфейсных элементов
соответственно: анимация (Animation Control), разделители (Header Control),
списки (List View), многостраничные диалоговые панели (Property Sheet),
закладки (Tab Control) и деревья (Tree View). В силу невозможности вызова
API-функций из динамических процедур все сервисные функции пришлось сделать
статическими, а для уменьшения объема объектного кода вынести их в
"собственные" библиотеки.

   COMPRESS.EXE
   Программа сжатия данных от Microsoft. Использует алгоритм Лемпеля-Зива
(LZ). Серьезное ограничение - в одном архиве может быть только один файл
(каталога нет). Может применяться для сжатия файла с данными для последующей
распаковки функциями библиотеки LZEXPAND.H--.

// ------------------------------------------------------------------- //

   ЧТО ЕЩЕ ХОЧЕТСЯ СДЕЛАТЬ

   Единственным ограничением развития библиотек возможности компилятора
C--. Многие вещи под Windows (наподобие косвенных вызовов или работы со
структурами по ссылке) весьма сложно организовать без нормальной модели
указателей. Развитие библиотек будет вестись параллельно развитию
компилятора.

   В последующих версиях библиотек планируется поддержка:
1) WinSocket и WinInet
2) DirectX (в частности, DirectDraw и DirectInput)
3) интерфейсов объектов оболочки (Shell Library Object)

// ------------------------------------------------------------------- //

   КАК СВЯЗАТЬСЯ С АВТОРОМ

Вы можете написать мне на E-Mail или в FIDO:

   E-Mail: hd_keeper@mail.ru
   FIDO:   2:5024/22.13@fidonet

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

     Have a nice coding!
     Антон Копьев AKA Keeper



