当两个按钮映射时,CDialog不会关闭

时间:2009-01-12 15:27:49

标签: mfc cdialog

Visual Studio 2005,C ++,Windows XP。

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

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg inherits from CDialog
    ON_BN_CLICKED(IDBAR, Bar)
END_MESSAGE_MAP()

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

我将上面的代码更改为:

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg inherits from CDialog
    ON_BN_CLICKED(IDBAR, Bar)
    ON_BN_CLICKED(IDBAZ, Baz)
END_MESSAGE_MAP()

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

如何关闭一个对话框,其中有两个或多个按钮映射到函数?

1 个答案:

答案 0 :(得分:3)

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