解决基于对话框MFC程序误按ENTER或ESC键退出的方法

版权声明:原创博文,转载请注明出处! https://blog.csdn.net/sunriver2000/article/details/82622471

问题

用户运行基于对话框的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按键消息。不到万不得已,不推荐使用。

猜你喜欢

转载自blog.csdn.net/sunriver2000/article/details/82622471