重写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);
}
标签:MFC,对话框,VK,pMsg,UINT,msg,afx,屏蔽掉,nChar
From: https://www.cnblogs.com/huvjie/p/17983376