個人的程式設計經驗認為:對于非模态對話框,按下ESC鍵和點選紅叉都會響應OnCancel()函數,而不會去響應OnClose()函數。
我們都知道,如果想屏蔽Enter鍵,隻須重寫OnOK()函數即可(重寫成空函數即可)。但是屏蔽ESC鍵卻不能這樣做,原因很
明确:這樣也會屏蔽紅叉的。下面提供一種屏蔽ESC鍵的方法,個人認為比較有用:
即重寫PreTranslateMessage()函數:
BOOL CToolDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加專用代碼和/或調用基類
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{ case VK_ESCAPE: //ESC return TRUE; }
}
return CDialogEx::PreTranslateMessage(pMsg);
}