在Internet Explorer_Server(IE9)中处理Windows消息

时间:2012-07-31 16:07:05

标签: c++ internet-explorer wndproc firebreath

我正在使用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作为单个进程运行。

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

你没有调用之前的HWND的wndproc。普遍调用DefWindowProc()是不正确的。当您对HWND进行子类化时,您需要获取旧wndproc的地址并传递您未处理的消息,而不是DefWindowProc()。

我不知道怎么做firebreath / ATL。