BHO(Browser Helper Objects)へのアクセラレータのまわし方

IEの中で行っている(ハズ)処理のサンプルです。自分のアプリでBHOをハンドリングする際にも利用できるかもしれません。
(2003.09.18)
    // BHOのサイトに実装
    virtual BOOL PreTranslateMessage(MSG* pMsg)
    {
        ATLASSERT(pMsg);
 
        // キーボードメッセージのみ対応
        if ((WM_KEYFIRST <= pMsg->message) && (pMsg->message <= WM_KEYLAST))
        {
            // 全てのオブジェクトに対して処理を行なう
            iterator iter = this->begin();
            while (iter != this->end())
            {
                CString strClsID = iter->first;
                IUnknownPtr spUnk = iter->second;
 
                if (TranslateAccelerator(spUnk, pMsg) != FALSE)
                {
                    return TRUE;
                }
 
                iter++;
            }
        }
 
        return FALSE;
    }
    static BOOL TranslateAccelerator(IInputObjectPtr spInputObject, MSG* pMsg) 
    {
        ATLASSERT(pMsg);
 
        if (spInputObject == NULL)
        {
            return FALSE;
        }
 
        HRESULT hr = S_OK;
 
        // フォーカスを保持している場合
        //  → S_OK/S_FALSE
        hr = spInputObject->HasFocusIO();
        if (hr == S_OK)
        {
            // アクセラレータ処理を実行
            //  → S_OK/S_FALSE
            hr = spInputObject->TranslateAcceleratorIO(pMsg);
            if (hr == S_OK)
            {
                return TRUE;
            }
        }
 
        return FALSE;
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.