Обработка сообщений 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.