0

Firebreath を使用してウィンドウレス プラグインを開発しています。さらに処理するために特定のメッセージをキャッチしたいのですが、それは可能ですが、残りのメッセージは「失われている」と思います。

メッセージループをフックする次のコードがあります。

bool myPlugin::onWindowAttached(FB::AttachedEvent *evt, FB::PluginWindow* pluginwin)
{
    FB::PluginWindowlessWin* win = dynamic_cast<FB::PluginWindowlessWin*>(pluginwin);

    FBLOG_INFO("", win->getHWND()); //getHWND returns the HWND of the Internet Explorer_Server window (get by using Spy++)

    SubclassWindow(win->getHWND(), (WNDPROC)&myPlugin::WndProc);
    return true;
}

そして、これは処理関数です:

LRESULT CALLBACK myPlugin::WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg) {
        case (WM_ERASEBKGND):           
            return 1;     
    }   
    return DefWindowProc(hWindow, msg, wParam, lParam);
}

これは IE9 で期待どおりに動作します (画像の再描画中に問題が発生したため、これを行っています) が、クリック メッセージは処理されず、他のメッセージも処理されません。ボタンがプラグインと同じページにある場合、クリックできません。

IE9 を単一のプロセスとして実行しています。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

0

以前の HWND の wndproc を呼び出していません。DefWindowProc() を普遍的に呼び出すのは正しくありません。HWND をサブクラス化するときは、古い wndproc のアドレスを取得し、DefWindowProc() ではなく、処理しないメッセージを渡す必要があります。

その火の息/ATLのやり方がわかりません。

于 2012-07-31T23:37:39.793 に答える