Добавление Контекстной Справки
Автор: Thomas Kokholm.
Компилятор: Visual C++ 5 & 6
Добавляя контекстную помощь к Вашему
приложению, Вы, тем самым улучшаете интерфейс
приложения и добавляете удобства пользователю.
Обычно это выглядит как всплывающее окно с
текстом справки, который Вы заранее определяете
как ресурс в Вашем проекте.
Добавление контекстной помощи используя
всплывающий HTML можно описать следующими
четырьмя шагами:
- Разрешить context help для диалога в страничке 'Dialog
Properties' -> 'Extended Styles'.
- Прописать текст справки для элемента в Вашей
'String Table'.
- Перехватить сообщение WM_HELPINFO в диалоговом
классе.
- Скопировать и поместить нижеприведённый код в
Ваш класс.
BEGIN_MESSAGE_MAP(CDlg, CDialog)
ON_WM_HELPINFO()
END_MESSAGE_MAP()
Важно, чтобы id, используемый в Вашей String Table был
назван так же как и элемент управления, используя
выпадающее меню в диалоге 'String Properties'. Обработчик
для сообщения WM_HELPINFO выглядит примерно так:
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
BOOL CDlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
// Именно этот метод и делает то, что нам нужно
ShowContextHelp(CWnd::FromHandle((HWND)pHelpInfo->hItemHandle),
pHelpInfo->MousePos, pHelpInfo->iCtrlId);
// Мы будем обрабатывать сообщение, пропуская базовый класс
// возвращаем CDialog::OnHelpInfo(pHelpInfo);
return TRUE;
}
Как упомянуто в комментариях, ShowContextHelp(...) это
метод который выполняет основную работу по
отображению контекстной справки. На вход метода
подаются два параметра: указатель на окно, и
структура типа POINT, в которой происходит запрос
на справку.
void CDlg::ShowContextHelp(CWnd* pWnd, POINT pt, int iCtrlID)
{
CString s;
// Загружаем текст помощи из String Table
if(s.LoadString(iCtrlID))
{
HH_POPUP hPop; // структура всплывающей HTML справки
// Инициализируем структуру знаками NULL (нулями)
memset(&hPop, 0, sizeof(hPop));
// Устанавливаем размер структуры
hPop.cbStruct = sizeof(hPop);
// Цвет фона - жёлтый
hPop.clrBackground = RGB(255, 255, 208);
hPop.clrForeground = -1; // Font color
hPop.rcMargins.left = -1;
hPop.rcMargins.bottom = -1;
hPop.rcMargins.right = -1;
hPop.pt = pt;
hPop.pszText = s; // Текст из String Table
hPop.pszFont = NULL; // Шрифт
HtmlHelp(pWnd->GetSafeHwnd(), NULL,
HH_DISPLAY_TEXT_POPUP, (DWORD)&hPop);
} // Если строка справки для данного запроса найдена, то завершаем
} // конец ShowContextHelp(...)
Структура HH_POPUP используется для отображения
контекстной справки во всплывающем окне.
Структура имеет члены для установки цветов
foreground/background, для положения вплывающего окна, и
для выбора шрифта.
Второй параметр для метода HtmlHelp(...), это
указатель на объект-файл где так же может
находиться строка справки.
Надеюсь данный пример Вам очень пригодится.
|