Je développe actuellement une application en VC++ qui intègre une aide en ligne qui a été engendrée à partir d'un outil de gestion de documentation capable de fournir, en sortie, un fichier .CHM. Ce fichier intègre des "ancres" destinées à mettre en place une aide contextuelle: selon l'endroit où on se trouve dans le programme (fenêtre ou boite de dialogue ou zône de saisie) on souhaite que quand on presse la touche F1 on ait un accès direct à l'information correspondante dans ce fichier d'aide en ligne.

Je constate que quand on presse F1 le fichier d'aide en ligne est bien ouvert mais le mécanisme "contectuel" ne fonctionne pas comme il devrait: l'aide en ligne s'ouvre toujours sur la page de bienvenue. Je recherche des explications sur la démarche à suivre pour que ça fonctionne correctement. Je soupçonne qu'il y a une syntaxe particulière à respecter quand on éxécute le programme hh.exe en lui passant comme paramètre le nom du fichier d'aide en ligne .CHM: peut être faut il rajouter un paramètre supplémentaire qui définirait l'ancre à accèder ?

Voici comment j'ai mis en place cette aide en ligne:

Les "ancres" du fichier .CHM ont été génèrées à l'aide du fichier .H suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#define IDH_HTMLHELP_BUG_BAIT 9999999999
#define Map_Prot_LR 0x200B4 (0xB4 étant la valeur du #define IDR_MAINFRAME pour lequel on veut une aide contextuelle).
#define Block_Change_plugLR_sans 0x103EB (0x3EB étant la valeur du #define IDC_... pour lequel on veut une aide contextuelle).
J'ai mis en place le petit bout de code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
ON_COMMAND(ID_HELP_FINDER, OnOnlineHelp)
ON_COMMAND(ID_HELP, OnOnlineHelp) // Proceed with F1 keystroke
ON_COMMAND(ID_CONTEXT_HELP, OnOnlineHelp) // Proceed with Shift + F1 keystroke
ON_COMMAND(ID_DEFAULT_HELP, OnOnlineHelp)
dans la Classe (CDialog) concernée par l'aide.

et la fonction OnOnlineHelp() se présente comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Get_Executable_Path(LocBuf);
strcat(LocBuf,"\\Help.chm");
i=GetWindowsDirectory((LPSTR)Help32ExeDir,sizeof(Help32ExeDir));
strcpy(lpCommandLine,Help32ExeDir);
strcat(lpCommandLine,"\\hh.exe ");
strcat(lpCommandLine,LocBuf);
RunHelp(lpCommandLine,Help32ExeDir); // NO Wait
Merci d'avance pour toute information à ce sujet.

pense à mettre la balise code , Merci Farscape