这是因为对话框接收到return时会自动响应OnOK(),而接到esc时会自动响应OnCancel()。
要解决这种问题:
1.将该对话框的所有按钮的Default Button属性设为false;
2. 重写该对话框的OnOk函数,然后将其中的CDialog::OnOK();语句删掉或注释掉。
3.重写该对话框的OnCancel函数,然后将其中的CDialog::Cancel();语句删掉或注释掉。
至此为此已经屏蔽掉了对话框的Enter与ESC默认的关闭窗口功能,以下就是利用某个按钮来实现OnOK()与OnCancel()函数的功能:
1. 为指定按钮添加处理函数,函数名要改一下,比如OnOkFun(),加上CDialog::OnOK();语句;
2.为指定按钮添加处理函数,函数名要改一下,比如OnCancelFun(),加上CDialog::OnCancel();语句;
注:以后点击OK按理执行的是这个函数,若有其它工作要做, 要加到刚才自定义的两个函数中来。而原先的IDOK按钮的处理函数将不再起作用。
代码如下:
void CLogin::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
OnOkFun();
}
void CLogin::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialog::OnOK();
}
void CLogin::OnOkFun(void)
{
CDialog::OnOK();
}
void CLogin::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
OnCancelFun();
}
void CLogin::OnCancelFun(void)
{
CDialog::OnCancel();
}
void CLogin::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialog::OnCancel();
}
要解决这种问题:
1.将该对话框的所有按钮的Default Button属性设为false;
2. 重写该对话框的OnOk函数,然后将其中的CDialog::OnOK();语句删掉或注释掉。
3.重写该对话框的OnCancel函数,然后将其中的CDialog::Cancel();语句删掉或注释掉。
至此为此已经屏蔽掉了对话框的Enter与ESC默认的关闭窗口功能,以下就是利用某个按钮来实现OnOK()与OnCancel()函数的功能:
1. 为指定按钮添加处理函数,函数名要改一下,比如OnOkFun(),加上CDialog::OnOK();语句;
2.为指定按钮添加处理函数,函数名要改一下,比如OnCancelFun(),加上CDialog::OnCancel();语句;
注:以后点击OK按理执行的是这个函数,若有其它工作要做, 要加到刚才自定义的两个函数中来。而原先的IDOK按钮的处理函数将不再起作用。
代码如下:
void CLogin::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
OnOkFun();
}
void CLogin::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialog::OnOK();
}
void CLogin::OnOkFun(void)
{
CDialog::OnOK();
}
void CLogin::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
OnCancelFun();
}
void CLogin::OnCancelFun(void)
{
CDialog::OnCancel();
}
void CLogin::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialog::OnCancel();
}