BOOL COleIPFrameWnd::PreTranslateMessage(MSG* pMsg) { // check server's accelerators first if (CFrameWnd::PreTranslateMessage(pMsg)) return TRUE; if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) { // always check to see if they exist in the default accel table // (they may exist but not be translated when disabled) HACCEL hAccel = GetDefaultAccelerator(); if (hAccel != NULL && IsAccelerator(hAccel, CopyAcceleratorTable(hAccel, NULL, 0), pMsg, NULL)) { return TRUE; } // check container's accelerators as last chance OLEINPLACEFRAMEINFO frameInfo = m_frameInfo; if (::OleTranslateAccelerator(m_lpFrame, &frameInfo, pMsg) == S_OK) return TRUE; } return FALSE; // keystroke not processed. }
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 // allow tooltip messages to be filtered if (CWnd::PreTranslateMessage(pMsg)) return TRUE; if (m_EnableAccel&&pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) { // finally, translate the message HACCEL hAccel = GetDefaultAccelerator(); return hAccel != NULL && ::TranslateAccelerator(m_hWnd, hAccel, pMsg); } return FALSE; }
BOOL CMDIChildWnd::PreTranslateMessage(MSG* pMsg) { // check for special cancel modes for combo boxes if (pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_NCLBUTTONDOWN) AfxCancelModes(pMsg->hwnd); // filter clicks // allow tooltip messages to be filtered if (CWnd::PreTranslateMessage(pMsg)) return TRUE; // we can't call 'CFrameWnd::PreTranslate' since it will translate // accelerators in the context of the MDI Child - but since MDI Child // windows don't have menus this doesn't work properly. MDI Child // accelerators must be translated in context of their MDI Frame. if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) { // use document specific accelerator table over m_hAccelTable HACCEL hAccel = GetDefaultAccelerator(); return hAccel != NULL && ::TranslateAccelerator(GetMDIFrame()->m_hWnd, hAccel, pMsg); } return FALSE; }