函数原型如下:
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