TN028: Контекстно-залежного допомогти підтримки

Цієї записці описується правила для призначення довідки контекстах ідентифікатори (тобто теми номерів) та інших питань, допомога у MFC 2.0. Контекстна довідка підтримки вимагає компілятор допомогу, яка доступна в Visual C++ Professional.

Типи довідки, які підтримуються

Існують два види відображення контекстної довідки, що здійснюються в Windows-додатків. Перше, відоме як "F1 допомогти" включає в себе запуск WinHelp з відповідний контекст, на основі поточного активного об'єкта. Другий — SHIFT + F1 режим. У цьому режимі курсор миші змінюється на допомогу курсор (комбінація стрілку + знак питання), і користувач переходить до натисніть на об'єкт, вони хотіли на допомогу. На цьому етапі WinHelp запущений, надання допомоги для об'єкта, на якому користувач натиснув.

Microsoft фонду класів реалізації обох цих видів допомоги. Крім того, в рамках підтримує два простих допомога команд, довідки та використання.

Файли довідки

Microsoft Базисні класи вважати один файл довідки. Файл довідки повинні мати те ж ім'я та шлях як додаток (.EXE - >.ДОВДКА).

Це Громадська CWinApp член змінної названий m_pszHelpFilePath , що користувач може змінити за бажанням.

Допомога контексті діапазонів

0x00000000 - 0x0000FFFF: визначені користувачем

0x00010000 - 0x0001FFFF: команди (меню/кнопки)

   0X00010000 + ID_

nbsp;  (Примітка: 0x18000 - > 0x1FFFF є практичне діапазоні, тому що команда ідентифікатори > = 0x8000)

0x00020000 - 0x0002FFFF: вікна і діалогові вікна

   0X00020000 + IDR_

nbsp;  (Примітка: 0x20000 - > 0x27FFF є практичне діапазоні, оскільки РДЕ < = 0x7FFF)

0x00030000 - 0x0003FFFF: повідомлення про помилки (на основі помилка рядок Посвідчення)

   0X00030000 + IDP_

0x00040000 - 0x0004FFFF: спеціального призначення (non клієнт ділянки)

   0x00040000 + HitTest області

0x00050000 - 0x0005FFFF: елементи керування (ті, які не є команди)

   0X00040000 + IDW_

Ці правила є жорстко до за замовчуванням реалізація класів Microsoft фонду. Можна змінити шляхом надання різних реалізацій різні функції пов'язані з допомогою член.

Простих команд "Допомога"

Є два простих допомога команд, які здійснюються Microsoft Базисні класи:

Ці дві команди просто відображення предметного покажчика довідки для застосування і показати користувача довідки з використання програми WinHelp, відповідно.

Відображення контекстної довідки (Довідка F1)

Це перша форма відображення контекстної довідки (зазвичай називають F1 допомогти). Користувач натискає F1, щоб отримати довідку з завданні (активного вікна або меню елемент). Без особливих "Довідка режим" бере участь.

Клавішу F1 зазвичай перекладається на команді з Кодом ID_HELP корисну можливість поміщені в головному вікні таблиці прискорювача. ID_HELP команда також породжених кнопка з Кодом ID_HELP основного вікна або діалоговому вікні. Також, якщо меню або діалогове вікно є активним, а користувач натискає F1, натискання клавіші є жорстко перевести на ID_HELP -команда.

Однак генерується команди ID_HELP , він направляється як звичайний командування досягне обробник команди (для більш докладну інформацію про Microsoft фонду класи команда маршрутизації архітектури, зверніться до технічної Примітка 21). Якщо програми допомоги увімкнуто, команда " ID_HELP " будуть розглядатися за допомогою функції CWinApp::OnHelp . Оскільки маршрутизація команду за замовчуванням не є адекватним для визначення найбільш конкретному контексті команду замість завжди прямує до об'єкта додатка і потім проходить Користувальницькі маршрутизації для довідки.

CWinApp::OnHelp спроби запуску WinHelp в такому порядку

  1. Перевірка на AfxMessageBox розмови на ідентифікатор допомогти.. Якщо зараз активне вікно повідомлення, WinHelp почав з контексту, відповідні до цього поля повідомлення.

  2. Якщо немає вікна повідомлення активний, CWinApp::OnHelp посилає WM_COMMANDHELP (повідомлення приватних Microsoft Базисні класи) до активного вікна. Якщо це вікно не реагує на запуск WinHelp, те саме повідомлення потім відправляється до батьківського цього вікна, поки повідомлення буде оброблено або поточного вікна це вікно верхнього рівня (і тому не має батьківський вікно).

  3. Якщо повідомлення залишається необробленої, то за замовчуванням допомогою виклику. Це робиться за допомогою команди ID_DEFAULT_HELP до головного вікна. Ця команда зазвичай відображається CWinApp::OnHelpIndex.

Глобально, ці значення Ідентифікаторів бази (0x10000 для команди, 0x20000 ресурсів, наприклад, діалоги і так далі), додаток слід перевизначити CWinApp::WinHelp. По суті цього в реалізації ClassWizard і AppWizard програми, наприклад, оскільки обидва поділитися один файл довідки.

Ігнорувати цю функціональність і те, як визначено контекст допомоги, застосунок має обробляти повідомлення WM_COMMANDHELP (див. нижче). Ви можете побажати, щоб забезпечити більш конкретні допомогою маршрутизації, ніж рамках надає, як він тільки виходить так глибоко, як поточного вікна MDI дитини. Або ви можете побажати, щоб забезпечити більш конкретна допомога для конкретного вікна або діалогове вікно - можливо на основі внутрішній стан цього об'єкта або активного елемента керування в діалоговому вікні.

WM_COMMANDHELP

afx_msg LRESULT CWnd::OnCommandHelp (WPARAM, LPARAM lParam)

WM_COMMANDHELP є MFC приватних Windows повідомлення, яке надходить на активного вікна, коли просили допомоги. Отримавши це повідомлення, у вікні це можна назвати CWinApp::WinHelp з контексту, що відповідає вікна внутрішній стан.

lParam

містить даний контекст допомоги. lParam дорівнює нулю, якщо немає контексту допомога була визначена ще. Реалізація OnCommandHelp допомогою контексті ID lParam можна визначити "краще" контекст, або можна просто передати його CWinApp::WinHelp.

wParam

не використовується, і буде нуль.

Якщо функція OnCommandHelp CWinApp::WinHelp, вона повинна повернути TRUE. Повернення зупиняє справжній маршрутизації цю команду для інших класів (базових класів) та інших вікон.

Режим довідки (Shift + F1 довідка)

Це друга форма відображення контекстної довідки. Як правило, цей режим вводиться, натиснувши клавіші SHIFT + F1, або через панель меню інструментів. Він реалізований в команду (ID_CONTEXT_HELP). Повідомлення фільтр гачок не використовується для перекладу цю команду під час модальне діалогове вікно або меню є активним, тому ця команда доступна лише для користувача під час застосування виконує основні повідомлення насос (CWinApp::Run).

Після введення цього режиму, курсор миші довідки відображається на всіх областях застосування, навіть якщо програми, зазвичай, відобразити власний курсор для цієї області (наприклад, межа розміру вікна). Користувач має можливість за допомогою миші або клавіатури виберіть команду. Замість того, щоб виконувати команду Довідка з відображення команди. Також користувачеві вибрати пункт видимий об'єкт на екрані, таких як кнопки на панелі інструментів і допомога буде відображатися для цього об'єкта. Цей режим допомога надається на CWinApp::OnContextHelp.

Під час виконання цього циклу, усі клавіатури вводу є неактивним, за винятком клавіші, що доступ до меню. Крім того, команду Переклад ще здійснюється через PreTranslateMessage , щоб дозволити користувачеві клавішу виклику і отримувати допомогу на те, що команда.

Якщо певного переклади або дії, що відбуваються в PreTranslateMessage функцію, яка не повинно мати місце під час SHIFT + F1 допомога режим, ви повинні перевірити CWinApp , член m_bHelpMode до виконання цих операцій. CDialog реалізації PreTranslateMessage перевіряє це перед викликом IsDialogMessage, наприклад. Це вимикає клавіші "діалогове вікно навігації" на немодальною діалогів під час режиму SHIFT + F1. Крім того, CWinApp::OnIdle все ще називається під час цього циклу.

Якщо користувач вибирає команду з меню, він обробляється як допомога на те, що команда (через WM_COMMANDHELP, див. нижче). Якщо користувач натискає видимій області вікна програми, рішуче здійснюється як на те, чи nonclient натисніть або натисніть клієнта. OnContextHelp ручки, карт nonclient кліків кліки клієнт автоматично. Якщо клієнт натисніть, потім він відправляє WM_HELPHITTEST у вікно, яка була натиснута. Якщо вікно ненульове значення, це значення використовується як контекст для довідки. Якщо це повертає нуль, OnContextHelp намагається вікна батьків (та іншому випадку, його батько і так далі). Якщо не вдалося визначити контекст допомоги, за замовчуванням використовується відправити команду ID_DEFAULT_HELP головне вікно, який потім (зазвичай) зіставлено CWinApp::OnHelpIndex.

WM_HELPHITTEST

afx_msg LRESULT CWnd::OnHelpHitTest (WPARAM, LPARAM lParam)

WM_HELPHITTEST це повідомлення приватних windows MFC, що отримав від активного вікна, натиснув під час SHIFT + F1 допомога режим. Отримавши це повідомлення, у вікні повертається DWORD допомогти ID для використання по WinHelp.

LOWORD(lParam)

містить осі x пристрій координат, коли миша була натиснута по відношенню до клієнтської області вікна.

HIWORD(lParam)

містить осі y координат.

wParam

не використовується, і буде нуля. Якщо значення є ненульовим, WinHelp називається зв'язку. Якщо значення дорівнює нулю, батько вікно сумніви про допомогу.

У багатьох випадках ви можете використовувати хіт тестування коду, ви вже маєте. Переглянути реалізації CToolBar::OnHelpHitTest приклад обробки повідомлення WM_HELPHITTEST , (код використовує код хіт тест, який використовується на кнопки та підказки у CControlBar).

Підтримка MFC AppWizard і MAKEHM

AppWizard створює файли, необхідні для створення файлу довідки (.cnt і .hpj-файли). Вона також включає в себе ряд готові.RTF-файли, які приймаються компілятором допомогти корпорації Майкрософт. Багато тем, є повними, але деякі, можливо, знадобиться змінити для конкретного застосування.

Автоматичне створення файлу "допомогти відображення" підтримує утиліту під назвою MAKEHM. Утиліта MAKEHM може перевести на застосування ресурсів.H файл довідки відображення файлу. Наприклад:

# визначити IDD_MY_DIALOGnbsp;  2000
# визначити ID_MY_COMMA&ND 150

будуть переведені на:

HIDD_MY_DIALOGnbsp;   0x207d0
HID_MY_COMMA&ND 0X10096

Цей формат є сумісним з допомогою компілятора об'єкті, який співставляє контексті ідентифікатори (номерів на правій стороні) з тему назвами (символів ліворуч).

Вихідний код для MAKEHM доступний у MFC програмування Utilties приклади MAKEHM.

Додавання підтримки допомогу після запуску AppWizard

Найкращий спосіб додати довідки для вашого застосування це перевірити "Допомогти контексті чутливі" варіант у діалоговому вікні Параметри AppWizard, перед створенням заявку. Таким чином AppWizard автоматично додає записи карта необхідні повідомлення до CWinApp, отриманих класу підтримки довідки.

Якщо ви вже створили вашому додатку без допомоги підтримку і тепер хотів би додати, переглянути Visual c + + програміст керівництво.

Довідка з повідомлень

Допомога на полях повідомлення (іноді називається оповіщення) підтримується через функцію AfxMessageBox , обгортка для MessageBox Windows API.

Існують дві версії AfxMessageBox, один для використання з Ідентифікатором рядок а інший для використання з вказівник на рядок (LPCSTR):

int AFXAPI AfxMessageBox(LPCSTR lpszText, UINT nType, UINT nIDHelp);
Int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)

В обох випадках є обов'язковим допомогти ID.

У першому випадку за промовчанням для nIDHelp є 0, що означає Довідка для цього вікна повідомлення. Якщо користувач натискає F1, а такі, як повідомлення активне поле, користувач не отримає допомогу, (навіть якщо додаток підтримує довідки). Якщо це не є бажаним, допомогти ID повинні бути надані для nIDHelp.

У другому випадку значення за промовчанням для nIDHelp дорівнює -1, який вказує на ID допомогти так само, як nIDPrompt. Допомога буде працювати тільки, якщо застосунок допомога включений, звичайно). Ви повинні надати 0 для nIDHelp, якщо ви хочете, що вікно повідомлення вже немає підтримки довідки. Якщо ви хочете, повідомлення, щоб допомогти включений, але бажання Ідентифікатор різних довідки, ніж nIDPrompt, просто надати позитивне значення для nIDHelp відрізняється від nIDPrompt.

Технічні примітки за номером |nbsp; Технічні примітки за категоріями

Index