MFCでキーボードプロック関数をどのように使用するか

MFCでは、CWndクラスのPreTranslateMessage関数をオーバーライドすることで、KeyboardProc関数が利用できるようになります。

まず、ウィンドウクラス内でKeyboardProcコールバック関数を次のように宣言してください。

LRESULT CALLBACK MyKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    // 处理键盘消息
    // ...

    // 如果需要继续处理消息,则调用CallNextHookEx函数
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

そして、あなたのウィンドウクラス内で PreTranslateMessage 関数を以下のようにオーバーライドします。

BOOL CMyWindow::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP)
    {
        // 调用KeyboardProc函数处理键盘消息
        LRESULT result = MyKeyboardProc(pMsg->message, pMsg->wParam, pMsg->lParam);

        // 如果键盘消息已经被处理,返回TRUE;否则,返回FALSE
        if (result != 0)
            return TRUE;
    }

    // 调用基类的PreTranslateMessage函数继续处理消息
    return CWnd::PreTranslateMessage(pMsg);
}

上記のコードでは、PreTranslateMessage 関数の中で WM_KEYDOWN や WM_KEYUP メッセージをあなたの KeyboardProc 関数に渡して処理します。KeyboardProc 関数が 0 以外の値を返した場合、キーボード メッセージは処理され、PreTranslateMessage 関数は TRUE を返してそれ以上の他のウィンドウへのメッセージの渡送を停止します。KeyboardProc 関数が 0 を返した場合、PreTranslateMessage 関数は基底クラスの PreTranslateMessage 関数を呼び出してメッセージの処理を続けます。

KeyboardProc 関数でキーボードメッセージを処理するときは、CallNextHookEx 関数を呼び出してメッセージを次のフック、または既定の処理関数に渡さなければなりません。これによって、他のウィンドウがキーボードメッセージを適切に処理できます。

bannerAds