我正在使用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作为一个单独的进程运行。
感谢您的帮助。
谢谢!
您没有调用上一个HWND的wndproc。普遍调用DefWindowProc()是不正确的。当您对HWND进行子类化时,您需要获取旧wndproc的地址,并将不处理的消息传递给它,而不是DefWindowProc()。
我不知道该怎么做。