我正在使用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作为单个进程运行。
感谢任何帮助。
谢谢!
答案 0 :(得分:0)
你没有调用之前的HWND的wndproc。普遍调用DefWindowProc()是不正确的。当您对HWND进行子类化时,您需要获取旧wndproc的地址并传递您未处理的消息,而不是DefWindowProc()。
我不知道怎么做firebreath / ATL。