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);
}
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号