0

我们目前正在使用 HTML 帮助在我们的软件中显示 CHM 帮助文件。但是,我们想更改打开帮助的方式,以使用嵌入式浏览器在我们自己的自定义窗口中打开它。

通过直接请求使用 URL 打开主题页面来实现这一点非常简单,但是,我们希望保持主题 ID 的使用,以便编辑团队可以根据他们认为合适的方式自由地重新构建和重新命名帮助,只能通过操纵地图和别名。

我一直在挖掘,找不到任何(相当便宜的)方法来获取从主题 ID 打开的 URL,这样我就可以请求在自定义窗口中打开 URL。我错过了一个技巧,还是有任何图书馆可以促进这一点?

4

1 回答 1

2

AFAIK 使用 Web 浏览器控件时,您需要一个带有主题文件名的有效 URL,例如“Garden/garden.htm”。所以其他解决方案非常困难,我认为使用 Web 浏览器控件是不可能的。

您知道您可以使用以下代码进行硬编码调用:

    public static string GetChmUrl(string fileName, string page)
{
  StringBuilder url = new StringBuilder();
  url.AppendFormat("mk:@MSITStore:{0}::", fileName);
  if (page.IndexOf('/') != 0) url.Append('/');
  url.Append(page);
  return url.ToString();
}

   webBrowser1.Navigate(new Uri(GetChmUrl(Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync, "Garden/garden.htm")));

要在没有完整帮助窗口的情况下按 TopicId 显示 HTMLHelp 主题,您可以为 HTMLHelp 查看器窗口创建一个特殊的窗口类型。好的——这更像是一项帮助创作工作,准备从您的应用程序调用。可以通过以特殊方式编译 CHM 并将其缩减为通常位于 HTMLHelp 查看器右侧的内容窗格。

您可以通过 TopicId 调用内容,结果显示在快照中:

    private void btnTopicId_Click(object sender, EventArgs e)
{
    Help.ShowHelp(this.btnOpenHelpShowTopic, helpProvider1.HelpNamespace, HelpNavigator.TopicId, @"10000");
}

在此处输入图像描述

许多年前,正如您在快照中看到的那样,应用程序有一个所谓的“嵌入式帮助”。这是通过 HTMLHelp API 调用完成的。我有旧的 Delphi 代码,但没有翻译成 .net。HTMLHelp 已经使用了将近 20 年,而今天更多地使用 Web 帮助。所以你必须考虑和决定。

在此处输入图像描述

您需要使用编组从 Visual C# 应用程序调用非托管 HTML 帮助 API。在 .net 中使用 HTMLHelp API 并不容易。要尝试一下,您可以从以下网址下载示例(在文章末尾)开始:https: //support.microsoft.com/en-us/kb/317406

我也附上了一张快照:

在此处输入图像描述

HTH。

于 2015-08-15T19:20:26.383 回答