
- •Содержание
- •Введение
- •Лабораторная работа №1 разработка программы на базе каркаса приложений
- •Лабораторная работа №2 создание остова приложения
- •Лабораторная работа №3 создание приложения с диалоговым интерфейсом.
- •Лабораторная работа №4 создание приложений с одно-документным интерфейсом
- •Лабораторная работа № 5 создание приложения с многодокументным интерфейсом.
- •Лабораторная работа № 6 создание приложений для построения графических изображений
- •Лабораторная работа № 7 создание приложений баз данных
- •Лабораторная работа № 8 создание приложений для работы с файлами.
- •Лабораторная работа № 9 создание справочной системы для приложения под windows
- •Лабораторная работа № 10 создание многопоточных приложений.
- •Список литературы.
Лабораторная работа № 9 создание справочной системы для приложения под windows
Цель работы - овладение инструментальными и программными средствами построения справочных систем для приложений под Windows.
Большинство коммерческих Windows-программ пользуются преимуществами мощного ядра справочной системы WinHelp, входящего в состав Windows. Каркас приложений MFC позволяет применять это ядро для поддержки контекстно-зависимой справки в разрабатываемых программах.
Справочная система может быть оформлена в виде автономного файла, имеющего оглавление и позволяющего переходить от одной темы к другой. Запуск такой системы производится исполнением команды WinHelp.exe, параметром которой является имя файла справочной системы *.hlp.
Приложение на основе библиотеки MFC может само по командам меню вызывать WinHelp, передавая этой программе идентификаторы контекста справки, производные от идентификаторов окна и команд, при этом можно изменить в MFC схему обработки сообщений справочной системы, чтобы подогнать ее под нужды этого приложения и создать контекстно-зависимую справку.
Задание №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. Запустить приложение и убедиться, что справочная система приложения функционирует нормально.
Добавить в меню 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