ie编程的一个问题。我该如何捕捉BeforeNavigate2事件

chenzhou35 2002-05-09 07:10:06
使用MSHTML Editing的browse模式,希望在navigate之前判断一下它的url是什么。使用连接点+IDisppatch捕获事件,我应该advise到哪个连接点?

对com和ie编程不是很熟。不知道问题有没说清楚。请指教。
谢谢。
...全文
218 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2002-05-10
  • 打赏
  • 举报
回复
不是每一个document都有webbrowser的,在某些版本的IE中,Frame的Document没有对应的webbrowser
参见http://www.csdn.net/Develop/read_article.asp?id=10175
chenzhou35 2002-05-10
  • 打赏
  • 举报
回复
uuuuuuuup
chenzhou35 2002-05-09
  • 打赏
  • 举报
回复
我把上面得代码改写成了如下代码:

IServiceProvider* isp ;
pDoc->QueryInterface(IID_IServiceProvider,(void **)&isp);
IWebBrowser2* iwb2;
hr = isp->QueryService( IID_IWebBrowserApp,IID_IWebBrowser2, (void**)&iwb2);

但是返回E_NOINTERFACE。都不知道是怎么回事了。
蒋晟 2002-05-09
  • 打赏
  • 举报
回复
A
This is a common cause for COM consternation. You have the window, document, or browser and you know you should be able to get the others, but everywhere you turn, QueryInterface delivers a big fat NULL. The answer lies in the mysterious IServiceProvider whose job it is, well, to provide services. IServiceProvider is a great interface: it has only one method, QueryService. If you’re using ATL smart pointers, it looks like this. First, you have to get the IServiceProvider.

CComQIPtr<IServiceProvider> isp = pIHTMLDocument2;

This does a QueryInterface on the document for IServiceProvider. Once you have it, you can get the browser like so.

CComQIPtr<IWebBrowser2> iwb2;
isp->QueryService(IID_IWebBrowserApp,
IID_IWebBrowser2, (void**)&iwb2);

If all this seems confusing, there’s a good reason for it. A cardinal rule of COM is that QueryInterface must always return an interface to the object queried. But the document doesn’t implement IWebBrowser2; it only knows how to get the object that does. The document, browser, and window are all separate objects. In general, IServiceProvider is used whenever a bunch of separate but related COM objects together implement some kind of service. QueryInterface asks an object, do you implement this interface? QueryService tells a service provider, "get me whatever object implements this interface, please." With QueryService, the interface pointer returned may or may not be the same object as the one queried. Figure 6 illustrates the system. All the objects implement their various interfaces and store internal pointers to one another; IServiceProvider is your way to get whichever object implements a particular interface. IServiceProvider::QueryService chases the internal pointers to retrieve the object that implements the interface you want.
chenzhou35 2002-05-09
  • 打赏
  • 举报
回复
通过IHTMLDocument2怎样可以获得IWebBrowser2的接口指针?
蒋晟 2002-05-09
  • 打赏
  • 举报
回复
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0698/browser.htm&nav=/msj/0698/newnav.htm
June 1998

Keeping an Eye on Your Browser by Monitoring Internet Explorer 4.0 Events
weblove 2002-05-09
  • 打赏
  • 举报
回复
留下你的E-MAIL,我给你个源代码
蒋晟 2002-05-09
  • 打赏
  • 举报
回复
去看看MFC的CHTMLView里面怎么捕获的
你的lpUnk是Document吧?要用Browser的才可以
chenzhou35 2002-05-09
  • 打赏
  • 举报
回复
但是我枚举了它的所有连节点,只有如下:
IID_IPropertyNotifySink
IID_HTMLDocumentEvents
IID_HTMLDocumentEvents2
IID_ITridentEventSink
IID_IDispatch
共5个。我已经试过1,2,5。都不能使我捕获到这个消息。而3,4放进去无法编译。说未定义。

我该怎么办?????
chenzhou35 2002-05-09
  • 打赏
  • 举报
回复
快出手啊!!!!
下个星期我就要去度婚假了。如果弄不出来好难启程的 。:(
多帮忙!!!!!
蒋晟 2002-05-09
  • 打赏
  • 举报
回复
BeforeNavigate2是Browser的事件,不是Document的
chenzhou35 2002-05-09
  • 打赏
  • 举报
回复
是啊,我也知道。
befornaviage的ID是:DISPID_BEFORENAVIGATE2
但是,我的代码
CImpIDispatch::Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS* pDispParams,
/* [out] */ VARIANT* pVarResult,
/* [out] */ EXCEPINFO* pExcepInfo,
/* [out] */ UINT* puArgErr)
{

if ( dispIdMember == DISPID_BEFORENAVIGATE2 )
int x = 0;//beforenavigate
if ( dispIdMember == DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP )
int y = 0;//mouse up

return S_OK;
}
却只能捕捉到鼠标up的事件。

advise的代码如下:
(其中:CImpIDispatch* m_pDocEvents; )

if ( lpUnk != NULL )
{

IConnectionPointContainer* pCPC;
hr = lpUnk->QueryInterface(IID_IConnectionPointContainer, (void **)&pCPC);
if (hr == S_OK)
{
hr = pCPC->FindConnectionPoint( DIID_HTMLDocumentEvents, &m_pConnectionPoint );
//我想是不是,这个地方的DIID_HTMLDocumentEvents该换成别的,如果是,该是什么呢?
if (hr == S_OK)
{
// Now we can advise the connectionpoint
hr = m_pConnectionPoint->Advise( m_pDocEvents, &m_dwConnectCookie );

}

pCPC->Release();
}
}
蒋晟 2002-05-09
  • 打赏
  • 举报
回复
每个事件都有自己的ID的
内容概要:本文档针对2026年华为杯研究生数学建模竞赛C题“服务于脑机接口与精神性疾病诊断的脑电图计算模型”,系统性地提供了从解题思路、算法实现到论文撰写的全流程支持资源。内容聚焦脑电信号(EEG)的数据预处理、特征提取、分类建模与结果分析,融合机器学习与深度学习技术(如SVM、CNN、LSTM、Transformer等),构建高精度的脑电识别模型,服务于抑郁症、癫痫等精神疾病的智能辅助诊断及脑机接口的信息解析。文档还整合了MATLAB与Python代码资源、模型实现案例及多领域科研技术支持体系,涵盖智能优化、信号处理、路径规划、通信优化等方向,并提供网盘资料下载与在线目录导航,强化理论与实践的深度融合; 适合人群:参加全国研究生数学建模竞赛的硕士、博士研究生,从事脑电信号处理、智能医学、生物信息学研究的科研人员,以及具备一定编程与数据分析基础、致力于人工智能在医疗健康领域应用的高校学生与青年学者; 使用场景及目标:① 快速掌握华为杯C题的技术路线与建模范式,高效完成竞赛备赛;② 构建面向临床辅助诊断的脑电计算模型,推动脑机接口与精神疾病识别的算法创新;③ 借助提供的开源代码与建模框架,开展科研复现、算法优化与学术论文写作; 阅读建议:建议结合文档提供的在线资源目录与百度网盘资料系统学习,优先精读脑电信号去噪、特征工程构建与深度学习模型选型部分,动手运行并调试代码,通过对比不同模型性能深化对算法适用性与工程实现细节的理解,同时关注跨学科方法的融合应用。
源码直接下载地址: https://pan.quark.cn/s/b2e30c4b4277 依据所提供的文件资料,可以总结出以下核心内容: 1. 华硕玩家国度x79 R4G主板属于高端级别的主板,归类于华硕玩家国度系列中的RAMPAGE IV GENE型号。该主板主要面向高端用户及游戏爱好者,具有卓越性能的特点。 2. 华硕玩家国度x79 R4G主板的使用指南采用简体中文版本,并以PDF格式发布。用户手册全面地阐述了该主板的操作方法和各项功能。 3. 版权声明明确指出,本手册包含的所有内容均受到著作权法的保护。未经华硕电脑股份有限公司(简称“华硕”)的许可,禁止进行任何形式的复制、剽窃、翻译或分发。 4. 免责声明具体说明,华硕提供的用户手册依照其发布时的状态呈现,不提供任何明示或暗示的保证。用户使用手册所面临的风险需自行承担,且华硕不对使用手册后的任何结果或信息的精确性或可靠性提供保证。 5. 用户手册中强调,使用本手册后可能引发的风险和损失,涵盖但不限于利益损失、业务中断、数据遗失或其他经济上的损失,华硕及其授权人员、雇员等均不承担相应责任。 6. 华硕拥有随时更新用户手册的权力。当产品规格或驱动程序发生变化时,用户手册将进行相应的修订。用户可以通过华硕的客户服务网站或直接联络华硕电脑客户关怀中心以获取最新版本的信息。 7. 第三方产品名称或内容的所有权和知识产权归属于各自的所有者,并受到相关法律法规的保护。 8. 在华硕的保修政策中,若产品经历过未经华硕授权的维修、规格调整、部件更换或其他未授权操作,或者产品序列号模糊不清或遗失,产品将不再享受华硕的保修和服务。 9. 华硕供应的主板及显卡产品在中国大陆地区(不包括港澳台地区)实施三年免费保修服务及全国联保服务...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧