【发布时间】:2011-06-20 17:04:57
【问题描述】:
语言: C++
开发环境:Microsoft Visual C++
使用的库: MFC
对 MFC 还很陌生,所以请耐心等待。我有一个通过 DoModal() 启动的对话框。我正在尝试向此对话框添加按钮,以替换默认的“确定”和“取消”按钮。现在,我无法完全弄清楚如何做到这一点。我删除了 OK 和 Cancel 按钮,并添加了具有新 ID 的新按钮,添加了事件处理程序,以及一些简单的代码供它们在按下时执行,但我无法让它工作。
我怀疑这与 DoModal() 期望来自 OK 或 Cancel 的响应有关,但没有别的。不过我不太确定。任何帮助将不胜感激!
编辑:添加了精简代码以供参考。
void CPrefsDlg::Launch() {
[ ... ]
CSAPrefsDialog dlg;
INT_PTR nRet = -1;
nRet = dlg.DoModal();
// Handle the return value from DoModal
switch ( nRet )
{
case -1:
AfxMessageBox("Dialog box could not be created!");
break;
case IDABORT:
// Do something
break;
case IDOK: // This works just fine.
exit(0);
break;
case IDSAVEONE: // This does not work.
MessageBox("Save One");
break;
default:
break;
};
}
void CPrefsDlg::SaveOne()
{
// I tried adding in my own handler for 'Save One'...this does not work.
MessageBox("Save one");
}
【问题讨论】:
-
@Jon:您需要发布一些演示问题的代码,并说明“我无法让它工作”的意思。
-
我已经添加了一些代码。如果还不清楚,请告诉我。
-
@Rup 编辑了上面的代码以反映我以前拥有的也不起作用的代码。
-
点击保存后,您能看到返回的值是多少吗?除非您将 ::SaveOne 处理程序连接到消息映射宏中,否则您的处理程序将无法工作 - 不记得您需要的语法,抱歉,但类向导应该为您完成。
-
... 并且处理函数需要在对话框类上,而不是在调用类上。