2017-11-20 8 views
3

私は、Desktop Bridgeを使用して、いくつかのMFCアプリケーションをWindows 10のアプリケーションとしてパッケージ化しようとしています。オンラインでヘルプコンテンツをホストする

HTMLヘルプファイル(CHM)が含まれており、インストールされているプログラムで作業しても問題ありません(VSの新しいバージョンにはヘルプファイルが含まれていません。私にはアクセス権がありません)。

私のウェブサイトでオンラインヘルプをホスティングしているのは不思議です。発生する問題のいくつかは、複数のヘルプトピックをホストする最良の方法、および(アプリケーション全体で)ヘルプトピックにアクセスする動作を上書きする方法です。 (私のアプリはダイアログベースです)

他の誰かがこれをすでに行っているのかどうか疑問に思いました。私は、これらの問題がどのように対処されたかを再検討することに興味があるだろう。私はオンラインで何かを見つけることができませんでした。

+0

chmファイルのトピックを表示しようとすると、__exactly__はどうなりますか? –

+0

@MichaelWalz:私はさまざまな問題を解決しようとして1ヶ月以上費やしてきましたが、私はMicrosoftの人々と一緒に仕事をしてきました。要するに、CHMファイルがパッケージの一部としてインストールされないと、それが存在しなければ開くことができません。ファイルがコピーされてもファイルを開く権限がない場合、MFCはヘルプファイルを読み込めないという一般的なメッセージを表示します。私はこれらの多くの問題を引き続き調査していますが、ここではオンラインでヘルプコンテンツをホスティングすることについて話したいと思います。 –

+0

私はCHMファイルをHTMLに変換するためにパッケージを使用しました(これはもう使用できません)。例:http://www.publictalksoftware.co.uk/msa/HelpOnline/ –

答えて

1

私は自分のhtmlヘルプをhtmlアンカーを使用して単一のドキュメントにホストして、関心のあるトピックにアクセスします。複数のページがある場合は、それに応じてMyHelpを調整してください。

私は実際にデスクトップブリッジを使用していますが、このような何かをしようとしているのか疑問に思っていなかった。

BOOL CMyDialog::OnHelpInfo(HELPINFO* pHelpInfo) 
{ 
    MyHelp(_T("HIDD_MYDIALOG"));   // HTML anchor goes here 
    return CDialog::OnHelpInfo(pHelpInfo); 
} 

... 

// a global helper function for showing help 
void MyHelp(LPCTSTR anchor) 
{ 
    extern CMyApp theApp; 
    TCHAR *cp, buffer[1000]; 

    // look for the html document in the program directory 
    strcpy(buffer, _T("file:///")); 
    DWORD dw = GetModuleFileName(theApp.m_hInstance, buffer + strlen(buffer), sizeof(buffer)); 

    if (cp = strrchr(buffer, '\\')) 
    { 
     strcpy(cp+1, _T("MyHelpDocument.htm#")); 
     strcat(cp+1, anchor); 

     // for some reason, I don't want the default browser to open, just the Internet Explorer 
     ShellExecute(NULL, _T("open"), _T("iexplore"), buffer, NULL, SW_SHOWNORMAL); 
      // or, for real online help, use just '_T("http://myurl.com/myonlinehelpdocument.html#") + anchor' 
      // instead of 'buffer' and ommit all before ShellExecute() 
    } 
} 

私はよく分からないのShellExecuteが、それはしかし店のアプリにするために使用されるように動作するかどうか。しかし、確かに何とかURLを開く方法があります。 Internet ExplorerのActiveXがアプリケーション内にヘルプページを表示するように動作する場合は、試してみるとよいでしょう。

+1

アプリケーションのすべてのダイアログボックスクラスにコードを挿入する必要がありましたか?オーバーライドできる共通の基礎となる方法はありませんか? –

+0

もちろん、メインメッセージループでWM_COMMANDHELPをキャッチすることができます。しかし、すべてのヘルプコンテキストIDをハンドラ内のURLにマップする必要があります。私はこれがあまりにも集中していると思うし、仕事の量は別々のOnHelpInfo()メンバーを持つよりも実際には低いわけではない。あなたは、あなたのURLのベースとしてダイアログIDを持つCDialogから派生したCHelpfulDialog、またはウィンドウタイトルを使用してURLを生成するCWndのCHelpfulWndを持つことで、妥協案に取り組むことができます。しかし、やはり、すべてのCDialogまたはCWndを派生クラスに置き換える必要があります。 – thomiel

+0

これはまさに私が探している集中化のタイプです。私は、そのハンドラにトピックIDを何か他のものに変換させることもできますし、WebサイトでIDを引数として扱うようにすることもできます。私はそれで遊ぶだろう。 –

関連する問題