CWnd::PreTranslateMessage 是 MFC 中的一个公共方法,它是一个虚拟函数,通常用于在消息被派发给窗口消息处理函数之前对消息进行预处理。这个函数通常被用于执行一些全局的或窗口范围内的消息处理,例如键盘快捷键、消息翻译等。

函数原型如下:
virtual BOOL PreTranslateMessage(MSG* pMsg);

  •  pMsg 是一个指向 MSG 结构的指针,其中包含了待处理的消息信息。


通过重写 PreTranslateMessage 函数,你可以在消息传递给窗口消息处理函数之前截获和处理消息。如果你返回 TRUE,表示消息已经被处理,不再传递给其他窗口消息处理函数;如果返回 FALSE,则表示消息会被传递给其他消息处理函数。

以下是一个简单的例子:
class CMyWnd : public CWnd {
public:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
};

BOOL CMyWnd::PreTranslateMessage(MSG* pMsg) {
    // 在这里进行消息预处理
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) {
        // 如果按下了 ESC 键,进行相应的处理
        AfxMessageBox(_T("ESC key pressed!"));
        return TRUE;  // 拦截消息,不再传递给窗口消息处理函数
    }

    // 调用基类的 PreTranslateMessage,以确保基类的功能正常
    return CWnd::PreTranslateMessage(pMsg);
}

在这个例子中,CMyWnd 类重写了 PreTranslateMessage 函数,截获了按下 ESC 键的消息,并显示一个消息框。通过返回 TRUE,这个函数拦截了消息,不再传递给窗口消息处理函数。需要注意,你通常需要调用基类的 PreTranslateMessage 以确保其他消息的正常处理。


转载请注明出处:http://www.pingtaimeng.com/article/detail/23531/MFC/CWnd