问题
用户运行基于对话框的MFC程序,如果不注意按下了ENTER或者ESC键,该程序会立刻退出。
原因是:默认情况下Enter键消息会响应OnOK,Esc键消息会响应OnCancel。
解决方法
方法一、重载CDialog的两个虚函数OnOK和OnCancel使其什么也不做。
void CTestTTSDlg::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialogEx::OnOK();
}
void CTestTTSDlg::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialogEx::OnCancel();
}
这里,重载OnCancel函数屏蔽CDialogEx::OnCancel(),会导致关闭程序失败。因此,还需重载OnClose函数。
void CTestTTSDlg::OnClose()
{
CDialogEx::OnClose();
CDialogEx::OnCancel();
}
方法二、重载PreTranslateMessage函数
BOOL CTestTTSDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_RETURN:
return TRUE;
case VK_ESCAPE:
return TRUE;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
这种方法比较粗暴,宁可错杀三千不可放走一个,使得该对话框程序不能响应ENTER和ESC按键消息。不到万不得已,不推荐使用。