语言: 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)
要连接对话框以终止并返回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只是打败我发布)取决于操作是什么,速度有多快以及是否要在首选项对话框中报告错误,您可能只想在点击后执行额外功能处理程序.
| 归档时间: |
|
| 查看次数: |
12874 次 |
| 最近记录: |