繁体   English   中英

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

[英]MFC OK/Cancel Dialog Button Override?

语言: 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");
}

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

void CSAPrefsDialog::OnBnClickedSaveone()
{
    EndDialog(IDSAVEONE);
}

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

ON_BN_CLICKED(IDSAVEONE, &CSAPrefsDialog::OnBnClickedSaveone)

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

MFC内置了ok和cancel按钮的ID。 那些是IDOK和IDCANCEL。 您可以通过返回DoModal()在交换机中处理这些,也可以更好地覆盖对话框类中的OnOK()OnCancel()方法以执行您想要的操作。

您可以通过在消息映射中添加一行来调用处理程序来执行此操作:

编辑:同样的事情适用于您添加到对话框中的按钮,我在下面的示例代码中添加了该对话框:

BEGIN_MESSAGE_MAP(MyDialog, CDialog)
    ON_BN_CLICKED(IDOK, &OnBnClickedOk)
    ON_BN_CLICKED(IDSAVEONE, &OnBnClickedSave)
END_MESSAGE_MAP()

void MyDialog::OnBnClickedOk()
{
   // do extra stuff when they click OK

   CDialog::OnOK(); // call base class version to complete normal behavior
}

void MyDialog::OnBnClickedSave()
{
   // this would be called for your save button with custom id IDSAVEONE

   // note: no base class call here as it's specific to your dialog
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM