【发布时间】:2012-08-01 07:37:39
【问题描述】:
我正在使用 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 作为单个进程运行。
感谢任何帮助。
谢谢!
【问题讨论】:
-
使用
SetWindowLongPtr和CallWindowProc解决了问题,但 IE 重新绘制自身的方式仍然存在问题。
标签: c++ internet-explorer wndproc firebreath