MFC 屏蔽ESC键和ENTER键关闭对话框的方法

本文详细介绍了如何在MFC对话框中重载PreTranslateMessage函数,以屏蔽ESC键退出和捕获ENTER键特定操作。通过实例展示了如何处理回车键输入并响应不同焦点控件,以及如何避免窗口默认关闭行为。
摘要由CSDN通过智能技术生成

重载PreTranslateMessage()函数,在这个函数里捕捉ESC键和ENTER键按下时的消息,然后什么都不做,或是添加代码完成自己想要实现的功能。

1. 完全屏蔽ESC退出键与ENTER回车键
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
        return TRUE; 
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)    
        return TRUE; 
    return CDialog::PreTranslateMessage(pMsg);
}
2. 屏蔽ESC退出键,捕捉ENTER回车键
// 对PreTranslateMessage函数的重载
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )     
    {
   	 	//按下回车,如果当前焦点是在自己期望的控件上
        if(GetFocus()->GetDlgCtrlID()==IDC_MSG_SEND)
        {                                           
            MFCTest1Dlg::OnBnClickedButtonInsert();//添加自己的处理代码
        }
         return TRUE;
    }
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) {
    	return TRUE;  
	}
    return MFCTest1Dlg::PreTranslateMessage(pMsg);
}

该代码在VC中的MFC程序测试通过,完全可以实现,红色的代码是可以根据自己的实际情况修改的。

3. 屏蔽ESC键,屏蔽ENTER键退出对话框、同时捕捉编辑框ENTER键
class MFCTest1Dlg::public CDialogEx
{
protected:
	// 对OnOK()函数的重载,清空确认事件处理,屏蔽回车键退出对话框
	virtual void OnOK() {}
	
	// 对OnCanel()函数的重载,清空取消事件处理,设置后不能点X图标关闭对话框
	//virtual void OnCancel() {}
};

// 对PreTranslateMessage函数的重载
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )     
    {
   	 	//按下回车,如果当前焦点是在自己期望的控件上
        if(GetFocus()->GetDlgCtrlID()==IDC_MSG_SEND)
        {                                           
            MFCTest1Dlg::OnBnClickedButtonInsert();//添加自己的处理代码
        }
         return TRUE;
    }
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) {
    	return TRUE;  
	}
    return MFCTest1Dlg::PreTranslateMessage(pMsg);
}

esc键和enter键在一般人的使用中会认为是取消或者确认当前输入的意思,并且认为焦点会后移(tab键),但是windows的mfc对应的是dialog的onok和oncancel函数会关闭当前窗体,所以一般就是取消作用。一切以鼠标为主,键盘只是输入的数据和字符。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whitemeen太白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值