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()。

我不知道该怎么做那个firebreath / ATL。

于 2012-07-31T23:37:39.793 回答