1

Visual Studio 2005、C++、Windows XP。

我有一个带有单个按钮的 CDialog,它调用如下函数:

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg继承自CDialog
    ON_BN_CLICKED(IDBAR,酒吧)
END_MESSAGE_MAP()

单击“X”时对话框关闭。

我将上面的代码更改为:

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg继承自CDialog
    ON_BN_CLICKED(IDBAR,酒吧)
    ON_BN_CLICKED(IDBAZ,巴兹)
END_MESSAGE_MAP()

我的对话窗口将不再关闭。每当单击 X 时,都会调用 Baz()。由于某种原因,第二个 ON_BN_CLICKED() 处理程序正在替换正常的对话框关闭行为。

如何关闭具有两个或更多按钮映射到功能的对话框?

4

1 回答 1

3

资源文件中分配给 IDBAR 和 IDBAZ 的数值是什么?一种可能的解释是 IDBAZ == IDCANCEL,它在 MFC 中默认定义为对话框的取消和 X 按钮的 ID。为这个常量定义你自己的处理程序将覆盖默认行为,即关闭窗口。这只适用于如果您以模态方式显示对话框 - 如果它是非模态的,那么您总是必须通过调用 EndDialog() 自己关闭对话框。

于 2009-01-12T17:32:02.083 回答