こんな感じで、仮想関数をオーバーライドした。 むちゃくちゃ簡単。

void CWinApp::WinHelp(DWORD dwData, UINT nCmd)
{
//既存の WinHelp 関数を無効にする
//CWinApp::WinHelp(dwData, nCmd);
if(nCmd != HELP_CONTEXT) return;

HWND hWnd_Help;
char szChmPath[MAX_PATH], szAppPath[MAX_PATH];
char szDrive[_MAX_DRIVE];
char szDir[_MAX_DIR];
char szFname[_MAX_FNAME];
char szExt[_MAX_EXT];
CString sTmp, sAfxMsg;

// アプリケーション自身のパスを取得し、拡張子を chm に書き換える
if(!::GetModuleFileName(NULL, szAppPath, MAX_PATH)) return;
::_splitpath(szAppPath, szDrive, szDir, szFname, szExt);
::_makepath(szChmPath, szDrive, szDir,szFname, ".chm");

// ヘルプの表示
if(this->m_pMainWnd == NULL)
{// メインウインドウのハンドラが定義されていないとき
hWnd_Help = ::HtmlHelp(NULL, szChmPath, HH_HELP_CONTEXT, LOWORD(dwData));
}
else
{
hWnd_Help = ::HtmlHelp(this->m_pMainWnd->m_hWnd, szChmPath, HH_HELP_CONTEXT, LOWORD(dwData));
}