在用MFC开发对话框应用程序时,经常需要屏蔽esc和enter的按键消息。
最典型的就是窗体作为子窗体存在时,若不屏蔽,按esc键后,子窗体会先退出,消失不见。
屏蔽的方法有两种:
1、重载OnCancel 和 OnOK函数。
public void C***Dlg::OnCancel()
{
// CDialog::OnCancel(); // 注释掉该方法
}
2、重载PreTranslateMessage函数。
BOOL CDlgMultiLanguage::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (WM_KEYDOWN == pMsg->message && VK_ESCAPE == pMsg->wParam)
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
推荐使用第二种方法。
若对话框作为子窗体时,往往需要将该消息在发送给其父窗体。
此时应该用PostMessage,而不是SendMessage。