Справочная система HELPMORE.HLP
Для иллюстрации применения стандартных и дополнительных макрокоманд, функции WinHelp, а также малоизвестных и редко используемых, но полезных встроенных окон (Embedded Windows), мы создали справочную систему helpmore.hlp (рис. 4.21). При этом мы взяли за основу подробно описанную нами ранее справочную систему hlpfile.hlp.
Рис. 4.21. Справочная система helpmore.hlp
Обратите внимание на окно Toolbar. В нем появилась новая кнопка "Calc". Если нажать на нее, будет запущено приложение calc.exe. Эта возможность реализована с помощью стандартных макрокоманд.
Выберите мышью строку "Вызов функции MsgBox из DLL". На экране появится сообщение (рис. 4.22).
Рис. 4.22. Сообщение, которое выводится при помощи специально созданной макрокоманды
Для вывода такого сообщения мы расширили стандартный набор макрокоманд приложения winhelp.exe, добавив собственную макрокоманду MsgBox, реализованную как функцию библиотеки helpmore.dll.
Если выбрать строку "Вторичное окно", на экране появится еще одно окно, которое живет самостоятельно, вне зависимости от состояния главного окна приложения winhelp.exe (рис. 4.23).
Рис. 4.23. Вторичное окно
Однако наибольший интерес представляет собой небольшое прямоугольное окно, внутри которого в цифровом виде отображается текущее время! Это так называемое встроенное окно. Мы использовали его для часов, однако в таком окне можно отображать все что угодно, например, анимацию или даже видеофильмы.
Вы можете сделать щелчок левой клавишей мыши внутри встроенного окна, при этом на экране появится диалоговая панель с предложением запустить "настоящие" часы clock.exe (рис. 4.24).
Рис. 4.24. Пользователю предлагается запустить приложение clock.exe
В случае утвердительного ответа приложение clock.exe будет запущено, вслед за чем на экране появится раздел справочной системы с информацией о часах. Этот раздел будет показан во временном окне, и в нем также отображается текущее время (рис. 4.25). Таким образом, мы использовали временное окно еще и как нестандартное средство для организации гипертекстовой ссылки.
Рис. 4.25. Гипертекстовая ссылка из встроенного окна
Для экспериментов со справочной системой hlpmore.hlp лучше всего использовать ее исходные тексты и другие файлы, расположенные на дискете, продаваемой вместе с книгой в каталоге hlpmore. Для тех, кто не смог приобрести дискету, мы приведем содержимое первого раздела справочной системы (раздела оглавления) и еще одного дополнительного раздела, которого нет в предыдущей описанной нами справочной системе helpfile.hlp.
На рис. 4.26 изображено оформление раздела оглавления.
Рис. 4.26. Раздел содержания справочной системы hlpmore.hlp
Вызов созданной нами макрокоманды MsgBox выполняется следующим образом (в исходном *.rtf файле правая часть строки оформлена скрытым текстом):
Вызов функции MsgBox из DLL!MsgBox(hwndApp,"Сообщение из DLL")
Макрокоманда получает два параметра, первый из которых является внутренней глобальной переменной hwndApp (идентификатор главного окна приложения winhelp.exe), а второй представляет собой произвольную текстовую строку.
Для отображения содержимого во вторичном окне использована следующая строка:
Вторичное окноgraphics>grwnd
Здесь graphics - контекст раздела, а grwnd - название вторичного окна, определенного в файле проекта справочной системы hlpmore.hpj (будет описан позже).
Для создания встроенного окна использована следующая строка:
{ewl HLPMORE, EWHlpMoreClass, TestString}
В этой строке оператор ewl указывает, что необходимо встроить окно и расположить его в левой части основного окна (аналогично bml). Существуют также операторы ewc и ewr, с помощью которых можно задать центрирование встроенного окна и выравнивание вправо, соответственно.
Параметр HLPMORE - имя DLL-библиотеки, содержащей функцию окна для обработки сообщений встроенного окна. В данном случае используется библиотека hlpmore.dll, исходным текстом которой мы займемся чуть позже.
Параметр EWHlpMoreClass - это имя класса окна, зарегистрированное DLL-библиотекой для обработки сообщений от встроенного окна.
Строка TestString - произвольная строка, которая передается в функцию встроенного окна на этапе его создания.
Встроенными окнами мы займемся ниже в отдельном разделе.
Если вы создаете исходный текст справочной системы hlpmore.hlp на базе файла hlpfile.rtf, описанного нами ранее, добавьте в него раздел с контекстом clock (рис. 4.27). Этот раздел будет появляться во временном окне в том случае, если вы щелкните левой клавишей мыши внутри встроенного окна.
Рис. 4.27. Раздел с контекстом clock
Приведем полный список подстрочных ссылок, определенных в файле hlpmore.rtf:
$ Пример справочной системы # cont + cont:010 K оглавление $ Описание команд # cmd + cont:020 K команды $ Использование клавиатуры # key + cont:030 K клавиатура $ Графические изображения # graphics K графика;битовые изображения $ Меню File # file + cmd:010 K File; загрузка документа $ Меню Edit # edit + cmd:020 K edit; редактирование $ Меню View # view + cmd:030 K view $ часы # clock $ Отсутствующий раздел # missing
В файле hlpmore.hpj находится файл проекта справочной системы (листинг 4.2).