【随笔记】MFC 解决按下 ESC、Enter 键会自动退出的问题

该博客介绍了在MFC应用程序中如何正确处理对话框的回车(OnOK)和ESC(OnCancel)事件,以防止阻止窗口关闭。作者建议在对话框头文件中重载OnOK()和OnCancel()函数,并在实现文件中添加对WM_CLOSE消息的响应,以确保窗口可以正常关闭。通过这种方法,可以避免使用按键拦截并保证对话框操作的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上大部分人的做法是通过拦截按键消息来屏蔽,实际正确的做法是:

1. 在对话框头文件重载 OnOK()(回车会触发) 和 OnCancel()(ESC会触发) 函数。

// XXXXXXXDlg.h
class CXXXXXXXDlg : public CDialogEx
{
    ......

private:

	virtual void OnOK() {};
	virtual void OnCancel() {};

	......
};

2. 重载之后会导致无法关闭窗口,原因是因为被拦截了,所需要增加 WM_CLOSE() 消息响应。

// XXXXXXXDlg.cpp
void CXXXXXXXDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	EndDialog(IDCANCEL);
	CDialogEx::OnClose();
}

参考文章:https://blog.youkuaiyun.com/bbdxf/article/details/7395201

MFC中解决回车和ESC关闭的问题,重载OnOk(),OnCancel()函数的正确做法_笨笨D幸福 - 后花园-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值