如何将MFC对话框映射到不同的帮助id

How to map a MFC dialog box to different help ids?

本文关键字:帮助 id 映射 MFC 对话框      更新时间:2023-10-16

我有一个对话框CMyDialogBox有帮助按钮。我已经将帮助按钮映射到所需的帮助id。

当我有以下要求时,问题出现了:当我创建以下实例时,帮助按钮应该映射为不同的帮助。

CMyDialogBox mesg1;  // help should map to 123.htm
CMyDialogBox mesg2;  // help should map to 124.htm
CMyDialogBox mesg3;  // help should map to 125.htm

但是对话框有一个帮助按钮映射到一个帮助内容。如何映射到多个帮助id?

我试过了:
我尝试使用Setntrldlg()更改initdailog()功能对话框的对话框id

我认为你很接近,但可能应该叫SetHelpID而不是SetDlgCtrlID

这个问题已经有几年的历史了,所以为了其他遇到这个问题的人的利益,这里是如何做的。假设选择哪个帮助页面的决定可以在OnInitDialog期间决定,并且假设您正在使用HTML帮助编译器工具的方式看起来像是您"应该"使用它们:

  1. resource.h文件中定义id,特别是makehm实用程序看到它们,以生成"H"版本。
  2. OnInitDialog中,使用这些id之一调用SetHelpID,取决于对话框的模式,或者需要不同帮助页面的任何条件。尽管它被称为SetHelpID,但它需要一个常规ID,因为"H"前缀的ID在应用程序中不存在。
  3. 在帮助文件中,设置id的"H"版本以映射到其他HTML文件。
  4. 如果你正在使用一个对话框模板,并没有使用它作为你的帮助id之一,你可能要继续映射到一个帮助页面无论如何,以防SetHelpID没有得到调用你的替代id之一(也许有一个例外或一些东西,例如)。

我认为你可以添加一个CString变量到CMyDialogBox,并在构造对话框时初始化它。像这样:CMyDialogBox messg1 ("123.htm");