CWinApp::PreTranslateMessage 是 MFC(Microsoft Foundation Classes)中的一个公共方法,用于在消息翻译之前拦截和处理消息。这个方法通常被用来定制消息处理,以便应用程序可以在消息传递到窗口过程之前对其进行处理。
BOOL CWinApp::PreTranslateMessage(MSG* pMsg);

在这个方法中,你可以添加自定义的消息处理逻辑,例如特定键盘快捷键的处理、消息过滤等。如果该方法返回 TRUE,则表示应用程序已经完全处理了该消息,MFC将不再继续处理该消息;如果返回 FALSE,则表示应用程序没有完全处理该消息,MFC将继续处理该消息。

以下是一个简单的示例,演示如何在派生的 CWinApp 类中重写 PreTranslateMessage 方法:
// MyApp.h
class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
    afx_msg void OnAppAbout();
    DECLARE_MESSAGE_MAP()
};

// MyApp.cpp
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, &CMyApp::OnAppAbout)
END_MESSAGE_MAP()

BOOL CMyApp::InitInstance()
{
    // 初始化应用程序
    // ...

    return TRUE;
}

int CMyApp::ExitInstance()
{
    // 退出应用程序
    // ...

    return CWinApp::ExitInstance();
}

BOOL CMyApp::PreTranslateMessage(MSG* pMsg)
{
    // 在这里添加自定义的消息处理逻辑
    // 例如处理特定的键盘快捷键
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_F1)
    {
        // 处理 F1 键
        // ...

        return TRUE; // 表示消息已被处理
    }

    // 其他消息处理逻辑
    // ...

    return CWinApp::PreTranslateMessage(pMsg);
}

void CMyApp::OnAppAbout()
{
    // 处理关于对话框
    // ...
}

请注意,这只是一个简单的示例,你可以根据应用程序的需求添加更复杂的消息处理逻辑。


转载请注明出处:http://www.zyzy.cn/article/detail/23132/MFC/CWinApp