Обработка сообщений Windows в Internet Explorer_Server (IE9)

Я разрабатываю плагин без окон, используя 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 ответ

Решение

Вы не вызываете wndproc предыдущего HWND. Универсальный вызов DefWindowProc() не является правильным. Когда вы создаете подкласс HWND, вам нужно получить адрес старого wndproc и передать ему сообщения, которые вы не обрабатываете, а не DefWindowProc().

Я не уверен, как сделать это огненное дыхание / ATL.

Другие вопросы по тегам