MFC 基于对话框的程序如何屏蔽掉 ENTER 键和 ESC 键退出的情况
重写PreTranslateMessage(MSG* pMsg)
函数。
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg BOOL PreTranslateMessage(MSG* pMsg) override; // 重写
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
实现:
BOOL CMFCApplication4Dlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
if (pMsg->wParam == VK_RETURN
|| pMsg->wParam == VK_ESCAPE)
{
return TRUE;
}
}
// 其他消息正常
return CDialogEx::PreTranslateMessage(pMsg);
}
这一个你就可以拦截掉消息。
另外,如果实现ON_WM_KEYDOWN
消息,回车键和ESC键好像没有进入到函数里面来,其他键按下的时候可以拦截,不知道啥原因。
ON_WM_KEYDOWN:
void CMFCApplication4Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// VK_RETURN VK_ESCAPE 按下的时候好像,没有进到这个函数里面来,起不到拦截作用,暂不知道原由。
if (nChar == VK_RETURN) {
return;
}
if (nChar == VK_ESCAPE) {
return;
}
CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了