HTML-Hilfe im Projekt
-
Ich habe eine SDI-Anwendung (CFormView) mit HTML-Hilfe erstellt. Jetzt wollte ich die diese editieren und bin dazu nicht recht zum Ziel gekommen. Ich gehe mal davon aus, dass ich die für mich zutreffenden HTML-Dateien (im Projektmappenexplorer unter HTML-Hilfethemen) mit der Hand editieren darf. Eine Frage stellt sich allerdings: wie kann ich die eigens erstellten Contols mit einem Hilfeindex versehen? Ich möchte, dass wenn der Benutzer z.B. für ein Editcontrol Hilfe anfordert, er auch die korrekte HTML-Seite angezeigt bekommt.....
Ich habe schon versucht, dass Visual Studio .NET Help Integration Kit 2003 zu installieren. Dies bricht aber mit der Meldung ab, dass VS dazu installiert sein muss. Dies ist ja aber der Fall....
-
Also zunächst ist das "Help Integration Kit 2003" für die Organisation der OnlineHilfe in Visual-Studio zuständig.
Das hat aber nichts mit selbst erstellten Hilfedateien in eigenen Projekten
zu tun.Der Compiler legt ja zunächst mal ein Gerüst mit einigen Beispielen an.
Eine Zuordnung der Hilfefunktion zur HTML-Datei findet sich in der .hhp Datei
Beispiele:
HID_FILE_PRINT =Der Befehl Drucken (Menue Datei).html HID_FILE_SAVE_AS =Der Befehl Speichern unter (Menue Datei).html HID_CONTEXT_HELP =Der Befehl Hilfe verwenden (Menue Hilfe).html HID_JUSTIEREN =Justieren.html
Wenn mehrere Elemente in einer Datei erklärt werden sollen (z.B. Toolbar)
geht das über den Dateinamen und einen "Anker".HIDC_GESCHW =Justieren.html#hidc_geschw
In der Datei selbst (hier Justieren.html" steht dann z.B:
<a name="hidc_geschw"></a><strong><span style="font-family: Arial">Schritte/s</span></strong></p>
Der Name HIDC_GESCHW wird übrigens in HTMLDefines.h aufgelöst. Wenn der Resourcen-Manager das nicht selbst dort einträgt kann man das auch selbst
tun.#define HIDC_GESCHW 0x10475
Natürlich muss auch im Resourcenmanager der Name (hier: HIDC_GESCHW)
für das Entsprechende Element eingetragen und der Aufruf der
Hilfe erlaubt sein.
-
Zunächst vielen Dank für die Infos. Soweit habe ich das denke ich verstanden.
merano schrieb:
Eine Zuordnung der Hilfefunktion zur HTML-Datei findet sich in der .hlp Datei
Hier meinst du doch sicher die hhp-Datei, denn eine hlp-Datei hat mein Projekt nicht.
Wie realisiere ich es aber, dass z.B. beim Aufruf eines modalen Dialogfeldes durch Drücken von F1 eine Hilfe dazu angezeigt wird? Ich habe dazu schon eine html-Seite erstellt. Wie verbinde ich aber die HID_DIALOG (als Beispiel) mit meinem Dialogfeld?
-
1. stimmt die guten alten .hlp Dateien gibts ja leider nicht mehr ...
2. Habe mal alle Fragmente aus einem funktionierenden Prg kopiert.
Hoffe das reicht als Hilfe (und ist noch funktionsfähig):BEGIN_MESSAGE_MAP(CGeneralPage, CPropertyPage) //{{AFX_MSG_MAP(CGeneralPage) ... ON_MESSAGE( WM_HELP, OnCommandHelpGP) END_MESSAGE_MAP()
// CGeneralPage Dialogfeld class CGeneralPage : public CPropertyPage { DECLARE_DYNCREATE(CGeneralPage) public: CGeneralPage(); ~CGeneralPage(); // Dialogfelddaten //{{AFX_DATA(CGeneralPage) enum { IDD = IDD_GENERAL_PAGE }; ... protected: // Generierte Nachrichtenzuordnungsfunktionen //{{AFX_MSG(CGeneralPage) ... afx_msg LRESULT OnCommandHelpGP(WPARAM, LPARAM lParam); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
afx_msg LRESULT CGeneralPage::OnCommandHelpGP(WPARAM, LPARAM lParam) { AfxGetApp ()->HtmlHelp (this->IDD+0x20000, HH_HELP_CONTEXT); return TRUE; }
aus resource.h
#define IDD_GENERAL_PAGE 109
-
Oh je, wer lesen kann ist klar im Vorteil. Du hattest mir ja schon die Antwort auf meine Frage gegeben. Ich fasse nochmal meinen Wissensstand zusammen, korrigiert mich, wenn ich da falsch liege.
So wie ich das sehe werden die Help-IDs automatisch durch das Framework in der HTMLDefines.h abgelegt, die saich im hlp-Verzeichnis im Projekt befindet. Dabei haben Menüeinträge und die dazugehörigen Buttons der Toolbar unterschiedliche IDs, sodass man da auch unterschiedliche Seiten dafür hinterlegen könnte. Das Framework erstellt im hlp-Ordner die Standard-HTML-Files, mit denen man alle MFC-typischen Themen, sofern speziell benötigt, bedienen kann.
Was ich jetzt noch nicht verstehe: in deinem Beispiel reagierst du auf die WM_HELP mit einer OnCommandHelp....; ist das vom Framework vorgegeben? Bei mir gibts nur standardmäßig eine Memberfunktion WinHelp und HtmlHelp oder die Möglichkeit, auf die Nachricht WM_HELPINFO zu reagieren. Ist dies das gleiche?
Wenn man einen modalen Dialog aufruft und dann F1 drückt, dann wird bei meinem Projekt eine WM_HELPINFO-Nachricht abgegeben, die dann in der OnHelpInfo abgearbeitet wird. Leider verstehe ich nicht ganz, was der AufrufAfxGetApp ()->HtmlHelp (this->IDD+0x20000, HH_HELP_CONTEXT);
bewirkt?
Wieso gibt es eigentlich so wenig Infos im Netz drüber (oder bin ich zu doof, diese zu finden?)?
-
Hallo,
Zitat: "So wie ich das sehe werden die Help-IDs automatisch durch das Framework in der HTMLDefines.h abgelegt"
hat VS2010 mit den HTMLDefines.h ein Problem? (oder nur ich
)
Erstelle ich ein MFC Projekt, dann wird die HTMLDefines.h im hlp Verzeichnis richtig erstellt. Füge ich dann z.B. nur einen einzigen Dialog hinzu und erstelle das Projekt, so werden die IDs zu den (ID_) (IDP_) (IDR_) (IDD_) nicht mehr vom Framework berücksichtigt. Somit funktioniert die Hilfe natürlich nicht mehr. (dabei ist der ContextHelp Schalter in den Eigenschaften völlig egal - er zeigt keine Wirkung)
Das Verhalten ist auch mit dem SP1 exakt gleich.
Was mache ich falsch?
Robert
-
Hallo,
falls jemand mal das gleich Problem hat: Die Datei 'Resource.h', die als Unicode gespeichert wurde muss einfach als ANSI gespeichert werden. Dann ist wieder alles i.O.
Bleibt die Frage, warum VS2010 die Resource.h nicht gleich im ANSI Format speichert?
Robert
-
RobertO schrieb:
Zitat: "So wie ich das sehe werden die Help-IDs automatisch durch das Framework in der HTMLDefines.h abgelegt"
RobertDie IDs aus der Resource.h sollten vom Helpcompiler eigentlich für HTMLHelp (WinHelp) angepasst und in die HTMLDefines.h geschrieben werden.
Die eigentlichen Hilfetexte sowie die Zuordnung in welcher .htm Datei sich die Hilfe zu einer Resource-ID befindet muss man wohl selbst anlegen.
Nach was der Hilfecompiler bei VS2010 genau sucht müsste man mal im logfile nachsehen .
Vielleicht hilft auch
http://msdn.microsoft.com/en-us/library/bt2hyd40(v=VS.100).aspx
oder genauer
Displaying F1 Help for a Dialog Box or Menu Option
http://msdn.microsoft.com/en-us/library/bsk56x5b.aspxweiter.
Habe das ganze mit VS2010 aber noch nicht getestet, da es aber dokumentiert ist sollte es auch funktionieren.
Bem: Dialoge, Toolbars u.s.w. haben separate Message-Loops.
-
Nachdem ein einfaches dialogbasiertes MFC-Projekt mit F1-Hilfe, das frisch mit
VS2010 erstellt wurde, nicht mehr funktionierte, nachdem in der Resourcenansicht
eine Bitmap hinzugefügt wurde, war ich schon etwas erstaunt.Debuggen mit Hilfe von PreTranslateMessage() zeigte, das der Aufruf samt Pfad
eigentlich funktionieren müsste.Da es aber absolut nicht wollte, habe ich durch Vergleich der originalen mit
der veränderten .rc festgestellt, das der alte Sprachenbug wohl in VS2010
(für nicht englisch Versionen) immer noch da ist.Zur Ansicht:
http://support.microsoft.com/kb/832187/en-usTatsächlich muss man von Hand die .rc Datei korrigieren, damit die Hilfe geht
- zumindest wenn man nicht englische (deutsche) Resourcen verwenden möchte.