0
点赞
收藏
分享

微信扫一扫

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);
}




举报

相关推荐

0 条评论