Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений на Visual C++ с использов...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
375.81 Кб
Скачать

Лабораторная работа № 9 создание справочной системы для приложения под windows

Цель работы - овладение инструментальными и программными средствами построения справочных систем для приложений под Windows.

Большинство коммерческих Windows-программ пользуются преимуществами мощного ядра справочной системы WinHelp, входящего в состав Windows. Каркас приложений MFC позволяет применять это ядро для поддержки контекстно-зависимой справки в разрабатываемых программах.

Справочная система может быть оформлена в виде автономного файла, имеющего оглавление и позволяющего переходить от одной темы к другой. Запуск такой системы производится исполнением команды WinHelp.exe, параметром которой является имя файла справочной системы *.hlp.

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

Задание №1. Создать автономный справочный файл с оглавлением и тремя тематическими разделами, выполнить следующие действия:

  1. Набрать в текстовом процессоре, поддерживающем форматы RTF, следующий текст справочного файла:

Оглавление

Темы:

Тема №1 HID_TOPIC1

Тема №2 HID_TOPIC2

Тема №3 HID_TOPIC3

——————————————————— конец страницы –––––––––

Тема №1

Это текст 1-ой темы

——————————————————— конец страницы –––––––––

Тема №2

Это текст 2-ой темы

——————————————————— конец страницы –––––––––

Тема №3

Это текст 3-ей темы

——————————————————— конец страницы –––––––––

2. Разбить разделителем «Конец страницы» весь текст на логические части – темы.

3. Перед словом «Оглавление» поставить сноску $ и задать для этой сноски заголовок раздела «Простое оглавление».

4. Перед сноской $ поставить сноску # и задать для этой сноски идентификатор контекста справки «HID_CONTENTS».

5. Во втором разделе перед словами «Тема №1» поставить три сноски #$k с текстами соответственно «HID_TOPIC1», «Первая тема», «Темы», где сноска к позволяет задать список ключевых слов, по которым можно будет находить заданную тему.

6. В третьем разделе перед словами «Тема №2» поставить три сноски #$k с текстами соответственно «HID_TOPIC2», «Вторая тема», «Темы».

7. В четвертом разделе перед словами «Тема №3» поставить три сноски #$k с текстами соответственно «HID_TOPIC3», «Третья тема», «Темы».

8. В первом разделе слова «Тема №1» подчеркнуть двумя линиями, слова «Тема №2» - одной линией, а слова «Тема №3» - перечеркнуть (точки перехода).

9. В первом разделе слова «HID_TOPIC1», «HID_TOPIC2», «HID_TOPIC3» сделать скрытыми (гиперссылки), при этом проверить их на соответствие сноскам типа «#» и убедиться, что впереди них нет пробела , то есть, что они находятся вплотную к словам «Тема №1», «Тема №2», «Тема3».

10. Убедиться, что после четвертого раздела также стоит разделитель «Конец страницы».

11. Проверить скрытый текст с помощью команды Tool/Options/Ярлычок View/Hidden Text.

12. Сохранить текст в формате RTF в файле Simple.rtf.

13. Подготовить файл проекта Simple.hpj со следующими опциями:

[OPTIONS]

CONTENTS = HID_CONTENTS

TITLE = ПРОСТОЙ СПРАВОЧНЫЙ ФАЙЛ

COMPRESS = true

WARNING =2

[FILES]

Simple.rtf

14. С помощью утилиты Microsoft Help Workshop (Hcrtf.exe), щёлкнув по кнопке Save and Compile, создать справочный файл Simple.hlp.

15. Запустить WinHelp, открыть файл Simple.hlp и проверить работу справочной системы.

16. Для создания оглавления с древовидной структурой добавить проект файл Simple.cnt с таким текстом:

: Base Simple.hlp

1 Help topics

2 Topic 1 = HID_TOPIC1

2 Topic 2 = HID_TOPIC2

2 Topic 3 = HID_TOPIC3

17. Создать справочный файл Simple.hlp с усовершенствованным оглавлением и проверить переходы из оглавления.

Задание №2. Создать остов одно-документного приложения, установить переключатель контекстно-зависимой справки Context-Sensitive Help, посмотреть какие дополнительные файлы включены в проект, и проверить команды Contents и Search меню Help, а также действия клавиши F1. Оценить изменения в исходном тексте программы. Проверить действие комбинации клавиш Shift+F1.

Задание №3. Создать одно-документное приложение с полным набором команд меню Help и функциональных клавиш для использования справочной системы Windows, выполнив следующие действия:

1. Создать остов одно-документного приложения с включенным переключателем Context-Sensitive Help и с именем Simple.

2. Создать справочный файл Simple.hlp.

3. Включить в меню Help элемент Topic1. а в обработчик сообщения для этого элемента включить оператор:

AfxGetApp()  WinHelp (HID_TOPIC1); // - unsigned long int;

4. Скомпилировать проект и убедиться, что по команде Help/Topic1 на экране появляется тема №1 справочного файла Simple.hlp, имя которого совпадает с именем приложения. Найти идентификатор HID_TOPIC1 в файле resourse.h и в файле Simple.hpj и убедиться, что он имеет одно и то же значение: #define HID_TOPIC1 … и [MAP] HID_TOPIC1 … .

5. Переименовать файл Simple.hlp в файл NewSimple.hlp.

6. Запустить приложениеSimple.exe и убедиться, что справочная система приложения не работает.

7. Создать новое приложение с тем же именем Simple, задав предварительно для элемента данных m_pszHelpFilePath класса CwinApp новое значение NewSimple.hlp.

8. Запустить приложение и убедиться, что справочная система приложения функционирует нормально.

  1. Добавить в меню Help элемент “Поиск темы номер 2”, а в обработчик сообщения для этой команды две строчки:

CString string (“Тема номер 2”);

AfxGetApp() -> WinHelp((DWORD)(LPCSTR) string, HELP_KEY);

10. Скомпилировать проект и проверить поиск по команде Help/Поиск темы номер 2.

11. Убедиться, что для элемента HelpTopics меню Help, генерируемого AppWizard, в обработчике CWinApp::OnHelpFinder используется следующий вызов:

WinHelp(OL,HELP_FINDER);

12. Для вызова первой страницы справочного файла с перечнем тем (“старомодное оглавление”) включить элемент OldContens и для его обработчика использовать функцию:

WinHelp(OL,HELP_INDEX);

13. Включить элемент ”Help on Help” в меню Help и для обработчика включить вызов:

WinHelp(OL,HELP_HELPONHELP);

14. Скомпилировать проект и проверить вызовы справочной системы.

15. Ввести в проектный файл *.hpj псевдоним контекстной справки для первой темы:

[ALIAS]

HID_TOPIC1=HID_FIRST_THEAM

[MAP]

HID_TOPIC1…

16. Убедиться, что вызов WinHelp(HID_FIRST_THEAM) дает тот же эффект, что и вызов WinHelp(HID_TOPIC1).

Мастер приложений AppWizard создает стандартный справочный файл, если выбран стандартный параметр контекстной справки Context-Sensitive Help. Делается это следующим образом:

Мастер AppWizard формирует в меню Help создаваемого остова приложения элементы Contents и Search.

В соответствии с установленными параметрами приложения AppWizard создает следующие файлы:

один или несколько стандартных справочных файлов в формате *.rtf;

проектный файл *.hpj для компилятора Hcrtf.exe;

стандартный файл карты справки *.hm;

командный файл для построения справочного файла *.hlp.

Осуществляется автоматический переход на интерпретацию команд файла MakeHelp.bat, в результате сначала вызывается программа построения карты справки Makehm.exe для создания файлов *.hm, а затем - компилятор справочной системы Hcrtf.exe, создающий справочный файл *.hlp, имя которого совпадает с именем приложения.

После интерпретации команд файла MakeHelp.bat мастер AppWizard связывает клавиши F1 и Shift+F1, а также элементы меню Help с функциями класса CWinApp или CWinThread.

Во время работы приложения при нажатии клавиш F1 и Shift+F1 или при выборе элементов меню Help осуществляется вызов WinHelp, который передается в качестве параметра идентификатор контекста, определяющий, какую именно справочную тему показать на экране. При этом, нажимая клавишу F1, можно задать вывод справки об элементе меню, выбранном с клавиатуры, или о текущем окне. Сочетание клавиш Shift+F1 обеспечивает вывод справок для элемента меню, на который указывает курсор мыши, для кнопки на панели инструментов, для окна - рамки, для окна отображения, для конкретного графического элемента в окне отображения, для строки состояния и для различных не клиентских элементов вроде команд системного меню. Такого же эффекта можно добиться, щелкнув мышью по кнопке ContextHelp на панели инструментов. В любом случае курсор меняет свою форму на стрелку с вопросительным знаком. При следующем щелчке мышью появляется справка с контекстом, определяемом по позиции курсора.

Каркас приложения определяет контекст справки на основе идентификатора активного элемента интерфейса: команды меню, окна-рамки, элемента управления, диалогового или информационного окна.

При генерации исходного кода идентификатор контекста справки формируется из идентификатора элемента и префикса “H”, а значение идентификатора контекста получается суммированием базового значения и значения идентификатора соответствующего элемента. Базовые шестнадцатеричные значения таковы:

Для элементов меню 10000

Для окна-рамки или диалогового окна 20000

Для окна сообщений об ошибках 30000

Для ни клиентской области 40000

Для элементов управления 50000

Например, ID_EDIT_CLEAR_ALL=OxE121,в то время ,как

HID_EDIT_CLEAR_ALL=Ox1E121.

Стандартные справочные разделы для указанных элементов формируются в файлах AfxCore.rtf и AfxPrint.rtf (если включена опция Printing And Rpint Preview).

Глобальная функция AfxMessageBox выводит сообщения об ошибках, формируемые каркасом приложений, и использует в качестве параметра идентификатор контекста справки, так что при нажатии клавиши F1 при выдаче такого сообщения обеспечивается вывод подсказки. Для обеспечения такой возможности идентификаторы окон сообщений об ошибках должны начинаться с IDP_, а идентификаторы контекстов в PTF-файле - с HIDP_. Параметр функции определяет выдачу восклицательного или вопросительного знака. Строка подсказки может определяться указателем на текст или идентификатором строкового ресурса

Gen In

Gen Включается Out

In Out