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

问题

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值