本人初学MFC,新建了一个基于对话框的MFC应用程序,但是按了ESC后,窗口就会关闭。看了网上的好多代码,都说重载OnCancel函数或PreTranslateMessage函数。重载OnCancel时遇到问题:不知道在哪里添加?
我在CXXDialog类上右击,选择“Add virtual Function...”,但是在窗口中找不到OnCancel函数,不知道是怎么回事?
请大家帮忙。但是有PreTranslateMessage函数,为什么会这样呢?
我在CXXDialog类上右击,选择“Add virtual Function...”,但是在窗口中找不到OnCancel函数,不知道是怎么回事?
请大家帮忙。但是有PreTranslateMessage函数,为什么会这样呢?
首先 :
我回答的是 重载OnCancel时遇到问题:不知道在哪里添加? 。
其次:
你 把重载的函数 清空, 你再按下ESC 窗口就不会被关闭了。
void CXDlg::OnCancel()
{
// TODO: Add extra cleanup here
//CDialog::OnCancel();
}
void CDdDlg::OnCancel()
{
// TODO: Add extra cleanup here
// CDialog::OnCancel();
}有没有办法,在按下ESC不关闭窗口,但不影响"确定”和“取消”按钮的功能呢?难道只有PreTranslateMessage?
屏蔽OnCancel中的 CDialog::OnCancel();把IDCANCEL按钮的ID修改一下 如 IDC_APPEXIT 添加响应函数 OnAppExit()
OnAppExit()
{
CDialog::EndDialog(IDCANCEL);
}
重载PreTranslateMessage函数,确实可以解决问题,且不影响"确定”和“取消”按钮的功能,以及菜单中的“关闭”和窗口右上角的“关闭”按钮。重载过程如下:
BOOL CDdDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->wParam == VK_ESCAPE)
{
return 0;
}
return CDialog::PreTranslateMessage(pMsg);
}