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()处理程序由于某种原因正在替换正常的对话框关闭行为。
如何关闭一个对话框,其中有两个或多个按钮映射到函数?
答案 0 :(得分:3)
资源文件中分配给IDBAR和IDBAZ的数值是多少?一种可能的解释是IDBAZ == IDCANCEL,默认情况下在MFC中定义为对话框的取消和X按钮的ID。为此常量定义自己的处理程序将覆盖默认行为,即关闭窗口。这只适用于你以模态方式显示对话框 - 如果它是无模式的,那么你总是必须通过调用EndDialog()自己关闭对话框。