首页
社区
课程
招聘
[求助]CHtmlView::Navigate对应的win32api是什么啊?
发表于: 2013-10-22 22:39 6328

[求助]CHtmlView::Navigate对应的win32api是什么啊?

2013-10-22 22:39
6328
CHtmlView::Navigate这个函数内部调用了那些win32 api啊 求解剖
在框架内显示网页我就知道调用CHtmlView::Navigate.
但是我想在 win32下自己创建框架 并且在框架内显示网页,但不知道 调用那些函数

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
这玩意儿,自己写非常的麻烦,我倒是写过,确实非常的麻烦,没有API可以直接解决,要用COM。
如果你要自己实现,必须要求你有比较强的DEBUG技能,知道怎么跟踪MFC实现并自己整理思路。
我只能把大致思路和概念说下:
1、需要三个东西,IOleClientSite*负责显示空间,IStorage*负责存储空间,IOleObject*通用Ole对象
2、调用StgCreateDocfile可得到一个IStorage*存储空间,而显示空间貌似没有办法直接创建,需要自己继承IOleClientSite并实现其所需的几个接口(实现时需要同时继承IOleClientSite、IOleInPlaceSite、IOleInPlaceFrame、IDocHostUIHandler,但某些接口可以不实现直接返回E_NOTIMPL),继承并实现后可以得到一个IOleClientSite*显示空间,然后以IOleClientSite*和IStorage*做为参数,调用OleCreate,第一个参数填CLSID_WebBrowser,第二个参数填IID_IOleObject,这样可以得到一个WebBrowser的OLE对象,如果是内嵌式的不需要菜单状态栏还需要IOleObject::DoVerb一下,如果需要事件还要再ConnectToConnectionPoint,第二个参数填DIID_DWebBrowserEvents2。
3、用IOleObject*进行QueryInterface参数填IID_IWebBrowser2得到一个IWebBrowser2接口,最后调IWebBrowser2::Navigate完成任务。
2013-10-23 15:25
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
还有使用前记得初始化OLE环境,否则OLE对象可能会创建不出来。如果你一定要研究这个,难点在于自己继承并实现一个IOleClientSite*,我当初是用了Hook的手段调试MFC程序,印象中是apihook挂QueryInterface,返回一个自己假IOleClientSite对象,内部调用真IOleClientSite的接口,在假IOleClientSite对象的所有接口中进行打印参数等等,这样可以获知哪些接口有用,哪些没用直接返回E_NOTIMPL,哪些接口即使有用也只是返回E_NOTIMPL等等,另外由于hook了QueryInterface,还可以知道另外需要IOleInPlaceSite、IOleInPlaceFrame、IDocHostUIHandler,因为它们曾经被QueryInterface过,都需要自己实现,因此一起继承实现,再然后还要对它们用假接口替换做桥,也得到其接口的实际使用方式等。
2013-10-23 15:40
0
游客
登录 | 注册 方可回帖
返回
//