MFC确定/取消对话框按钮覆盖?

Jon*_*Jon 2 c++ mfc button

语言: C++

开发环境: Microsoft Visual C++

使用的库: MFC

MFC很新,所以请耐心等待.我有一个通过DoModal()启动的对话框.我正在尝试向此对话框添加按钮,以取代默认的"确定"和"取消"按钮.现在,我无法弄清楚如何做到这一点.我删除了"确定"和"取消"按钮,并添加了新的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");
}
Run Code Online (Sandbox Code Playgroud)

Rup*_*Rup 5

要连接对话框以终止并返回IDSAVEONE,您需要在Save One按钮上添加一个单击处理程序并让它调用EndDialog:

void CSAPrefsDialog::OnBnClickedSaveone()
{
    EndDialog(IDSAVEONE);
}
Run Code Online (Sandbox Code Playgroud)

如果通过对话框编辑器添加单击处理程序(例如,双击按钮),则会生成必要的框架代码以供您连接; 否则你需要BEGIN_MESSAGE_MAP在对话框类的部分中添加以下行:

ON_BN_CLICKED(IDSAVEONE, &CSAPrefsDialog::OnBnClickedSaveone)
Run Code Online (Sandbox Code Playgroud)

但是(因为AJG85只是打败我发布)取决于操作是什么,速度有多快以及是否要在首选项对话框中报告错误,您可能只想在点击后执行额外功能处理程序.