C++中嵌入ie浏览器总结 .
C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单
- ie边框 及上下文菜单
普通嵌入到程序里面的浏览器页面都会有一个灰色的边框,这样放到程序里面就很难看。目前网上流行的办法添加css:body{
border:0;
}
但是这个方法的缺点是,必须要把页面头部的dtd申明去掉。网上的错误提法是类似以下链接的: http://www.faceker.com/200801/webbrowser-no-border.html 这里面讲,只要把头部改成:
但是目前很多页面用了比较新的css,改成这样后,页面就无法正常显示了。让网页美工改样式? 真是有点困难。
后来继续查阅了资料,发现比较好的办法,那就是重载 IDocHostUIHandler 接口,其中,实现以下部分:
HRESULT STDMETHODCALLTYPE FrameSite::GetHostInfo(DOCHOSTUIINFO *pInfo)
{
pInfo->cbSize = sizeof(DOCHOSTUIINFO);
pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER|DOCHOSTUIFLAG_SCROLL_NO;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
return S_OK;
}
其中 DOCHOSTUIFLAG_NO3DBORDER 就表示不要生成边框,DOCHOSTUIFLAG_SCROLL_NO 表示不要生成滚动条
这样就可以比较完美的解决边框和滚动条的问题,不用依赖页面的调整 。让设计师爱用什么用什么。
另外一个就是禁用右键菜单,网上也有不少办法,但是用这个接口可以很简单的实现:
IUnknown *pcmdtReserved, IDispatch *pdispReserved)
{
HRESULT result = S_FALSE; //Dont Interfere
BOOL handled = FALSE;
switch ( m_contextMenuMode )
{
case kDefaultMenuSupport:
break;
case kNoContextMenu:
result = S_OK;
handled = TRUE;
break;
case kTextSelectionOnly:
if (dwID != CONTEXT_MENU_TEXTSELECT)
{
result = S_OK;
handled = TRUE;
}
break;
case kAllowAllButViewSource:
if (dwID == CONTEXT_MENU_DEFAULT)
{
//result = ModifyContextMenu(dwID, ppt, pcmdtReserved);
handled = TRUE;
}
break;
case kCustomMenuSupport:
if (dwID == CONTEXT_MENU_DEFAULT)
{
//result = CustomContextMenu(ppt, pcmdtReserved);
handled = TRUE;
}
break;
}
if (! handled)
{
result = S_FALSE;
}
return result;
}
这里不仅可以控制右键菜单显示,m_contextMenuMode = kNoContextMenu,还可以做到自定义菜单显示,m_contextMenuMode =其他值。因为暂时还不需要自定义菜单,所以这里没有实现。
如果用wxie,就在FrameSite类增加这个接口即可,不关注的接口直接返回S_FALSE 或E_NOTIMPL;
如果用sdk或mfc,可以 调用IOleObject 的SetClientSite 方法,设置一个继承了IOleClientSite 和 IDocHostUIHandler 的接口。
C++中嵌入ie浏览器总结(2) - 双向通讯
为了解决这些问题,经过google后找到了问题的解决办法 :
(1) c++->html ,可以通过调用页面脚本方法来实现,调用方法如下:
这个方法实现了C++对页面脚本调用,而且参数个数可以任意。比如页面脚本是 :
(2) html->c++ 通过脚本的window.external 方法,首先,在前文提到过的IDocHostUIHandler 接口中,实现方法:
其中 m_window->getExternal();
返回的是自定义的一个IDispatch 接口类:
然后只要在自己类里面继承这个接口,就可以接收来之脚本的调用请求。
脚本里面编写函数:
就可以调用c++的函数,并且可以得到返回值,从而解决了html->c++的通讯问题
解决了双向通讯后,页面就不需要用刷新来解决,网页设计师和c++编程人员只要定义好通讯接口,大家各自实现好接口方法就可以完成界面功能了。
C++中嵌入ie浏览器总结(3) - wxIE 的 bug解决及最后效果展示
C++中嵌入ie浏览器总结(4) - 对话框拖动
C++中嵌入ie浏览器总结 .相关推荐
- C++中嵌入ie浏览器
转载自:http://www.360doc.com/content/13/0522/14/8236462_287267576.shtml 很不错的文章,原文保存 C++中嵌入ie浏览器总结(1) - ...
- 怎样在Winform窗体中嵌入Web浏览器
背景 项目当中需要在Winform窗体中嵌入网页,虽然微软自带了WebBrowser控件,但是她是以IE模式运行的,兼容性实在太差,找了一圈发现有个叫CefSharp的家伙还不错,于是就拿来玩了一下. ...
- 使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
介绍 以前曾试过在app中整合一个可靠又快速的web浏览器吗? 在本文中,你会学到如何轻松地将奇妙的CefSharp网页浏览器组件(基于Chromium)集成到你的C# app中. 然后,你可以使用此 ...
- cefsharp设置cookie_使用CefSharp在.Net程序中嵌入Chrome浏览器(八)——Cookie
CEF中的Cookie是通过CookieManager来管理的,可以用它来设置发送的Cookie. 发送Cookie 发送Cookie的一个基本示例如下: var cookieManager = _c ...
- ActiveX控件制作与发布,如何将您的C++程序嵌入到浏览器中
本文演示如何将Qt应用程序打包嵌入IE浏览器并发布. 1. 例子Qt程序: 新建项目,选择Qt Library类型,类名为ClassDemo. 新建QtGui类(继承QWidge)类名ClassGui ...
- 在多种浏览器中嵌入Applet
1 基本信息 摘要:一个开发好的Java Applet,是通过标准的标签(Tag)嵌入到HTML页面中的.浏览器在解析到支持的嵌入Applet的标签时,会启动Java Plug-in来渲染标签中的Ja ...
- 在python程序中嵌入浏览器_用Python中的wxPython实现最基本的浏览器功能
通常,大多数应用程序通过保持 HTML 简单来解决大多数浏览器问题 ― 或者说,根据最低共同特性来编写.然而,即便如此,也仍然存在字体和布局的问题,发行新浏览器和升级现有浏览器时,也免不了测试应用程序 ...
- PHP被浏览器解释成注释,HTML+CSS入门 在HTML中嵌入的php代码会被浏览器注释掉如何解决...
本篇教程介绍了HTML+CSS入门 在HTML中嵌入的php代码会被浏览器注释掉如何解决,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < html中嵌入php代码时,没有输 ...
- cocos2d 嵌入网页_在 cocos2d-x 中嵌入浏览器
在 cocos2d-x 中嵌入浏览器 次阅读 Embeds a browser in cocos2d-x 在游戏中嵌入网页是很常见的需求,cocos2d-x 引擎官方并没有提供这个功能. 我在网上转了 ...
最新文章
- Oracle Grid Control 10.2.0.5 for Linux 安装和配置指南
- 通过Soul看微内核架构(二)
- OpenCV 对图片亮度增强或减弱
- 使用不同版本的UI5库文件本地测试UI5应用
- acm常见算法及例题
- 85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备
- HTML+CSS+JS实现 ❤️六边形圆柱弹性动画特效❤️
- Canvas学习:封装Canvas绘制基本图形API
- Java 继承——2
- 使用ILSpy软件反编译.Net应用程序的方法及注意事项
- Kali防火墙ufw安装与命令
- 2021年华为OD面试流程
- 强大的Pidgin,Pidgin的使用
- 翻出过去的一个多彩泡泡屏保特效(JS+CSS版)
- 中文汉字转拼音首字母大写
- 2017存钱计划(python实现)
- nginx.pid-nginx: [error] open() /var/run/nginx.pid failed (2: No such file or direc
- 苹果电容笔和普通电容笔有什么区别?实用平板电脑电容笔推荐
- 创建一个Student的类,输出姓名,学号,性别,语文数学英语成绩,并求和,求平均数
- python-turtle入门