Uwaga ta opisuje zasady przypisywania pomocy kontekstów identyfikatory (czyli numerów tematów) i innych kwestii pomocy w MFC 2.0. Pomoc kontekstowa wymaga kompilatora pomocy, która jest dostępna w Visual C++ Professional.
Rodzaje pomocy, obsługiwane
Istnieją dwa rodzaje pomocy kontekstowej w aplikacji systemu Windows. Po pierwsze, określonych jako "F1 Pomoc" polega na uruchamianie programu WinHelp w odpowiednim kontekście oparte na aktualnie aktywnego obiektu. Druga jest tryb SHIFT + F1. W tym trybie kursor zmienia kształt kursora pomocy (kombinacja strzałki + znak zapytania), a użytkownik przechodzi do kliknij obiekt, który chcesz pomoc na. W tym punkcie WinHelp jest uruchamiany, podając pomoc dla obiektu, na którym użytkownik kliknął.
Microsoft Foundation classes wykonania obu formach pomocy. Ponadto ramach obsługuje dwa polecenia Pomoc proste, indeks pomocy i korzystanie z pomocy.
Pliki pomocy
Microsoft Foundation classes założono w jednym pliku pomocy. Aby plik pomocy muszą mieć tę samą nazwę i ścieżkę aplikacji (.EXE - >.HLP).
Jest to publicznych CWinApp zmienną o nazwie m_pszHelpFilePath , który użytkownik może zmienić w razie potrzeby.
Pomoc kontekście zakresów
0x00000000 - 0x0000FFFF: zdefiniowane przez użytkownika
0x00010000 - 0x0001FFFF: poleceń (przyciski menu/poleceń)
0X00010000 + ID_
nbsp; (Uwaga: 0x18000 - > 0x1FFFF jest zakres praktycznych, ponieważ polecenie identyfikatory > = 0x8000)
0x00020000 - 0x0002FFFF: okna i okna dialogowe
0X00020000 + IDR_
nbsp; (Uwaga: 0x20000 - > 0x27FFF jest zakres praktycznych, ponieważ IDRs < = 0x7FFF)
0x00030000 - 0x0003FFFF: komunikaty o błędach (na podstawie ID ciąg błędu)
0X00030000 + IDP_
0x00040000 - 0x0004FFFF: specjalnego przeznaczenia (obszary-klient)
0x00040000 + powierzchnia HitTest
0x00050000 - 0x0005FFFF: formanty (takie, które nie są polecenia)
0X00040000 + IDW_
Zasady te są zakodowane w Domyślna implementacja Microsoft Foundation classes. Może być zastąpiona przez dostarczanie różne implementacje różne funkcje związane z pomocy państwa.
Prostego polecenia "Pomoc"
Istnieją dwa proste poleceń pomocy, które są implementowane przez klasy Microsoft Foundation:
Te dwa polecenia po prostu pokazać indeks pomocy dla aplikacji i wyświetlić pomoc użytkownika przy użyciu programu WinHelp odpowiednio.
Pomoc kontekstowa (F1 Pomoc)
Jest to pierwszy formy pomocy kontekstowej (zwykle zwane F1 Pomoc). Użytkownik nacionie klawisz F1, aby uzyskać pomoc na temat wykonywanego zadania (aktywne okno lub element menu). Zajmuje się żadnych specjalnych "pomoc tryb".
Klawisz F1 zazwyczaj jest tłumaczony polecenia z Identyfikatorem ID_HELP przez akcelerator umieszczane w głównym oknie akceleratora tabeli. Polecenie ID_HELP może być również generowany przez przycisk z Identyfikatorem ID_HELP w polu głównego okna lub okna dialogowego. Również gdy aktywny jest menu lub okno dialogowe, a użytkownik nacionie klawisz F1, klawiszy jest trwale kodowana tłumaczenie na polecenia ID_HELP.
Jednak polecenie ID_HELP jest generowany, jest ono routowane jako komenda normalnej aż do napotkania obsługi polecenia (aby informacje na ekranie architekturę routingu polecenie Microsoft Foundation klas odnoszą się do technicznych Uwaga 21.) Jeżeli aplikacji jest pomoc włączone, polecenie ID_HELP będzie obsługiwane przez funkcję CWinApp::OnHelp . Ponieważ routing polecenia domyślny nie jest wystarczające do określenia najbardziej specyficzny kontekst polecenia zamiast jest zawsze routowane do obiektu aplikacji i następnie poddawany niestandardowe routingu dla pomocy.
CWinApp::OnHelp próbuje uruchomić WinHelp w następującej kolejności
Aby globalnie zastąpić wartości bazowej identyfikator (0x10000 dla poleceń, 0x20000 dla zasobów, takich jak dialogi i tak dalej), aplikacja powinna zastąpić CWinApp::WinHelp. Odbywa się to w rzeczywistości we wdrażaniu aplikacji ClassWizard i AppWizard, sami, na przykład, ponieważ zarówno udział w jednym pliku pomocy.
Aby zastąpić tę funkcję i sposób, w jaki ustalona w kontekście pomocy, wniosek powinien obsługiwać wiadomości WM_COMMANDHELP (patrz poniżej). Może chcesz routują bardziej szczegółowych pomocy niż przewiduje ramy, jak trafia się tylko jako głęboko jako bieżące okno potomne MDI. Lub mogą chcieć dostarczają bardziej szczegółowych pomoc dla określonego okna lub okna dialogowego--prawdopodobnie na podstawie bieżącego stanu wewnętrznego tego obiektu lub formant aktywny w oknie dialogowym.
WM_COMMANDHELP
afx_msg LRESULT CWnd::OnCommandHelp (WPARAM, FIKCYJNYMI fikcyjnymi)
WM_COMMANDHELP jest MFC prywatnych Windows wiadomość odebrana przez aktywnego okna, gdy złożono wniosek o pomoc. Po oknie odbiera wiadomość, może wywołać CWinApp::WinHelp z kontekstu, który odpowiada stan wewnętrzny okna.
fikcyjnymi
zawiera obecnie dostępnych kontekstu pomocy. fikcyjnymi wynosi zero, jeżeli brak kontekstu pomoc została jeszcze ustalona. Implementacja OnCommandHelp można użyć Identyfikatora kontekstu w fikcyjnymi określić "better" kontekstu lub po prostu można przekazać do CWinApp::WinHelp.
wParam
nie jest używana i będzie równa zero.
Jeśli funkcja OnCommandHelp wywołuje CWinApp::WinHelp, powinien zwracać wartość PRAWDA. Zwrócenie TRUE zatrzymuje marszruty tego polecenia do innych klas (klasy bazowej) i do innych okien.
Tryb pomocy (Shift + F1 Pomoc)
Jest to drugi formularz pomocy kontekstowej. Ogólnie rzecz biorąc w tym trybie jest wprowadzana przez naciśnięcie klawiszy SHIFT + F1 lub za pośrednictwem menu/pasek narzędzi. Jest zaimplementowany jako polecenia (ID_CONTEXT_HELP). Hak filtr wiadomości nie jest używany do tłumaczenia tego polecenia podczas modalnego okna dialogowego lub menu jest aktywny, w związku z tym to polecenie jest dostępne tylko dla użytkownika, gdy aplikacja jest wykonywany pompy głównej wiadomości (CWinApp::Run).
Po wprowadzeniu tego trybu, kursor myszy pomocy jest wyświetlany nad wszystkie obszary zastosowania, nawet jeżeli aplikacji zwykle wyświetli własne kursor dla tego obszaru (na przykład obramowania zmiany rozmiaru okna). Użytkownik ma możliwość wybierz polecenie za pomocą myszy lub klawiatury. Zamiast z wykonaniem polecenia, uzyskać pomoc dotyczącą tego polecenia jest wyświetlany. Ponadto użytkownik może kliknąć obiekt widoczny na ekranie, takich jak przycisk na pasku narzędzi i pomoc będzie wyświetlany dla tego obiektu. Ten rodzaj pomocy jest dostarczone przez CWinApp::OnContextHelp.
Podczas wykonywania tej pętli, wszystkie naciskane jest nieaktywny, z wyjątkiem dla kluczy, które uzyskać dostęp do menu. Ponadto polecenie tłumaczenie nadal odbywa się za pośrednictwem PreTranslateMessage aby zezwolić użytkownikowi na naciśnij klawisz skrótu i uzyskać pomoc dotyczącą tego polecenia.
Jeśli istnieją szczególne tłumaczenia lub działań w funkcji PreTranslateMessage , która nie odbywa się w trybie SHIFT + F1 Pomoc, należy sprawdzić członka m_bHelpMode CWinApp przed wykonaniem tych operacji. CDialog życie PreTranslateMessage sprawdza to przed wywołaniem metody IsDialogMessage, na przykład. "Okno dialogowe nawigacji" klawiszy niemodalny okna dialogowe to wyłącza trybie SHIFT + F1. Ponadto CWinApp::OnIdle nadal jest wywoływana podczas tej pętli.
Jeżeli użytkownik wybierze polecenie z menu, jest on traktowany jak uzyskać pomoc dotyczącą tego polecenia (poprzez WM_COMMANDHELP, patrz poniżej). Jeśli użytkownik kliknie widocznego obszaru okna aplikacji, określenie odbywa się dalej od tego, czy jest on nonclient lub kliknij klienta. OnContextHelp zajmuje się mapowanie kliknięć nonclient do klienta kliknięć automatycznie. Jeśli jest kliknij klienta, następnie wysyła WM_HELPHITTEST aby oknie, który został kliknięty. Jeśli to okno zwraca wartość różną od zera, że wartość jest używana jako kontekście o pomoc. Jeżeli zwraca wartość zero, OnContextHelp próbuje okno nadrzędne (a nie spełniając tego obiektu nadrzędnego i tak dalej). Jeśli nie może zostać ustalona w kontekście pomocy, domyślnie przyjmowana jest wysyłanie polecenia ID_DEFAULT_HELP do głównego okna, które następnie (zwykle) jest mapowany na CWinApp::OnHelpIndex.
WM_HELPHITTEST
afx_msg LRESULT CWnd::OnHelpHitTest (WPARAM, FIKCYJNYMI fikcyjnymi)
WM_HELPHITTEST jest wiadomości prywatnych windows MFC, otrzymany przez aktywne okno kliknięty w trybie pomocy SHIFT + F1. Gdy okno otrzyma ten komunikat, zwraca identyfikator pomocy DWORD do użytku przez WinHelp.
LOWORD(lParam)
zawiera współrzędnych urządzenia osi X, gdy mysz został kliknięty względem obszaru klienckiego okna.
HIWORD(lParam)
zawiera Współrzędna Y.
wParam
nie jest używana i będzie równa zero. Jeśli wartość zwracana jest niezerowa, WinHelp nazywa się w tym kontekście. Jeżeli wartość zwracany jest zero, okno nadrzędne jest badany pod kątem pomocy.
W wielu przypadkach mogą korzystać z badania hitem kodu, który już masz. Zobacz implementacja CToolBar::OnHelpHitTest przykład obsługi wiadomości WM_HELPHITTEST (kod wykorzystuje kod hitem badania stosowane na przyciskach i podpowiedzi w CControlBar).
MFC AppWizard wsparcia i MAKEHM
AppWizard tworzy pliki niezbędne do tworzenia pliku pomocy (pliki .cnt i .hpj). Obejmuje ona także wiele wbudowanych.Pliki RTF, które są akceptowane przez kompilatorem pomocy. Wiele tematów są kompletne, ale niektóre mogą wymagać modyfikacji dla określonej aplikacji.
Automatyczne tworzenie pliku "pomoc na mapowanie" jest obsługiwane przez narzędzie o nazwie MAKEHM. Narzędzie MAKEHM można tłumaczyć zasób aplikacji.H pliku do pliku mapowania pomocy. Na przykład:
# define IDD_MY_DIALOGnbsp; 2000
# define ID_MY_COMMA&ND 150
zostanie zamieniona na:
HIDD_MY_DIALOGnbsp; 0x207d0
HID_MY_COMMA&ND 0X10096
Ten format jest zgodny z kompilatorem pomocy instrumentu, który mapuje identyfikatorów kontekstu (liczby po prawej stronie) z nazwy tematu (symbole po lewej stronie).
Kod źródłowy dla MAKEHM jest dostępny w próbce narzędzia programowania MFC MAKEHM.
Dodawanie obsługi pomocy po uruchomieniu AppWizard
Najlepszym sposobem dodania pomocy do aplikacji ma sprawdzić opcję "Kontekstowego Help" w AppWizard w oknie dialogowym Opcje przed utworzeniem aplikacji. W ten sposób AppWizard automatycznie dodaje wpisy mapę komunikatów niezbędne do pochodnych CWinApp klasy do pomoc techniczna.
Jeśli już utworzono aplikacji bez wsparcia dla pomocy, a teraz chcesz ją dodać, zobacz Podręcznik Visual C++ Programmer's Guide.
Pomoc na temat okna komunikatów
Pomoc na temat okna komunikatów (czasami nazywany alerty) jest obsługiwane przez funkcję AfxMessageBox , otoki dla funkcji API MessageBox systemu Windows.
Istnieją dwie wersje AfxMessageBox, jeden do użytku z Identyfikatorem ciąg, a drugi do użytku z wskaźnika do ciągu (LPCSTR):
int AFXAPI AfxMessageBox(LPCSTR lpszText, UINT nType, UINT nIDHelp);
int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)
W obu przypadkach jest opcjonalne identyfikator pomocy.
W pierwszym przypadku domyślne dla nIDHelp jest 0, co oznacza nie pomocy to okno komunikatu. Jeśli użytkownik nacionie klawisz F1, podczas gdy takie jak wiadomości pole jest aktywne, użytkownik nie otrzyma pomoc (nawet wtedy, gdy aplikacja obsługuje pomocy). Jeśli nie jest to pożądane, identyfikator pomoc należy przewidzieć nIDHelp.
W drugim przypadku wartość domyślna dla nIDHelp jest -1, który wskazuje, że identyfikator pomocy jest taka sama, jak nIDPrompt. Pomoc będzie działać tylko wtedy, gdy aplikacja jest włączone pomocy, oczywiście). 0 Powinien przewidywać nIDHelp, jeśli chcesz, że brak wsparcia pomocy w oknie komunikatu. Należy ma komunikat pomocy włączone, ale pragną Identyfikatora pomocy innego niż nIDPrompt, po prostu podać wartość dodatnią dla nIDHelp innym niż nIDPrompt.
Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii