Pb d'intégration d'un fichier chm à une mfc sous VC7
Bonjour tout le monde
je suis en train de développer une mfc à laquelle j'aimerais intégrer un fichier d'aide qui apparaitrait en appuyant sur F1.Je développe sous VC7.
j'ai tout d'abord regarder l'article de farscape concernant l'intégration d'un chm à une mfc sous VC6 et j'ai suivi à la lettre les instructions sachant très bien que ca serait différent sous VC7 donc en y apportant 2-3 modifs:
- j'ai créé un dossier "html" à la racine de mon projet dans lequel se trouve mes pages html (dans un sous dossier Web) et mon projet HHP. En plus des onglets [OPTIONS] et [FILES], le projet comporte les onglets suivants :
[ALIAS]
IDH_MAINFRAME=Web\Intro.htm
[MAP]
#include MyAppName.hm
- j'ai rajouté le projet hhp à mon projet dans lequel je n'avais pas coché l'option "Context sensitive help". J'ai rajouté la lib htmlhelp.lib aux dependencies du projet. Pour les propriétés du hhp, dans l'onglet Custom build :
Commands
hhc.exe html\$(InputName).hhp
echo.
copy html\$(InputName).chm $(OutDir)\$(InputName).chm
Outputs
html\$(InputName).chm
Dependencies
html\$(TargetName).hm
et pour les propriétés de mon resource.h, toujours dans l'onglet Custom build :
Commands
makehm /h ID_,IDH_,0x10000 IDM_,IDH_,0x10000 resource.h >>"html\$(TargetName).hm"
makehm /h IDP_,IDH_,0x30000 resource.h >>"html\$(TargetName).hm"
makehm /h IDR_,IDH_,0x20000 resource.h >>"html\$(TargetName).hm"
makehm /h IDD_,IDH_,0x20000 resource.h >>"html\$(TargetName).hm"
makehm /h IDW_,IDH_,0x50000 resource.h >>"html\$(TargetName).hm"
echo. >>"html\$(TargetName).hm"
Outputs
html\$(TargetName).hm
sans oublier le #include <htmlhelp.h> dans mon stdafx.h.
- En ce qui concerne mon code, dans ma classe MyApp, dérivée de CWinApp, dans le constructeur j'ai rajouté EnableHtmlHelp(), et dans MyApp::InitInstance(), le changement d'extension du fichier d'aide :
Code:
1 2 3 4 5
|
CString strHelpFile = m_pszHelpFilePath;
strHelpFile.Replace(".HLP", ".chm");
free((void*)m_pszHelpFilePath);
m_pszHelpFilePath = _tcsdup(strHelpFile); |
Enfin dans ma classe CMainFrame, dérivée de CFrameWnd, j'ai rajouté dans le header la fonction virtuelle HtmlHelp :
Code:
1 2 3 4 5
|
//{{AFX_VIRTUAL(CMainFrame)
public:
virtual void HtmlHelp (DWORD dwData, UINT nCmd = HELP_CONTEXT);
//}}AFX_VIRTUAL |
et dans mon cpp
Code:
1 2 3 4
|
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
END_MESSAGE_MAP() |
et
Code:
1 2 3 4 5 6 7
|
void CMainFrame::HtmlHelp(DWORD dwData, UINT nCmd)
{
MyApp *pApp=static_cast<MyApp*>(AfxGetApp());
::HtmlHelp(m_hWnd, pApp->m_pszHelpFilePath, HH_HELP_CONTEXT,
nCmd == HELP_CONTEXT ? dwData : 0);
} |
Voilà. Ce que j'obtiens, c'est que quand mon application se créée, si j'appuie sur F1, rien ne se passe. Il faut que je la minimise puis la fasse reapparaitre pour qu'il se passe quelque chose si j'appuie sur F1. J'ai alors le message d'erreur suivant : "Le démarrage de l'aide a échoué".
Si vous pouvez m'aider...merci beaucoup d'avance
pense à mettre la balise de code, merci Farscape