我正在创建一个IE扩展(使用VS2008,C ++),需要对IE中的滚动条事件做出反应。我正在使用BHO,我可以访问父窗口的IWebBrowser2元素,IHTMLDocument2元素和HWND。我无法弄清楚如何访问滚动条。我看过一些代码,一旦我访问它们就允许我处理滚动条,而不是如何获取滚动条对象(或者它们是IE窗口的子窗口?)本身。有什么想法吗?
答案 0 :(得分:1)
MSHTML呈现自己的滚动条而不是使用本机系统控件。这就是为什么你可以将CSS规则应用于它们。
我会尝试的是:
答案 1 :(得分:0)
我已经实现了IDispatchImpl,我猜我必须覆盖IDispatch :: Invoke方法的ATL实现来处理事件。这是对的吗? 如果是这种情况并且我使用DIID_DWebBrowserEvents2汇总了条目,那会怎样受到影响? 这是我班级的样子:
class ATL_NO_VTABLE CHelloWorldBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>,
public IObjectWithSiteImpl<CHelloWorldBHO>,
public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
{
.
.
.
BEGIN_SINK_MAP(CHelloWorldBHO)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2
END_SINK_MAP()
.
.
.
}
由于
编辑:我发现当覆盖Invoke时,永远不会调用OnDOcumentCOmplete。我该如何解决这个问题?
答案 2 :(得分:0)
请参阅this主题获取答案。我的问题和正确答案已经在这里得到了恰当的描述。