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);
}
posted @   double64  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示