VC-基础-WebBrowser控件中弹出新网页窗口
用webbrowser控件浏览网页时,常弹出新的网页窗口,若不做任何控制的话,会在默认浏览器(一般是IE)中打开,这样就在新的窗口打开了,原程序就很难控制了,且存在webbrowser控件和IE的session共享问题。解决方法是让新打开的网页在自己的对话框中打开,具体步骤如下:
一、新建基于对话框的MFC程序,对话框ID为IDD_SHELL_DIALOG,添加Microsoft Web Browser控件(ID为IDC_EXPLORER),并利用向导生成IDC_EXPLORER的控件型变量m_webBrowser,Navigate(),就可以连接要浏览的网页了。
[.cpp]
VARIANT vInfo;
VariantInit(&vInfo);
m_webBrowser.Navigate("http://×××", &vInfo, &vInfo, &vInfo, &vInfo);
二、要为弹出的网页也新建一个对话框(ID为IDD_DIALOG_NEW),利用向导添加类生成CNewDlg类(: public CDialog)。并在该对话框中添加Microsoft Web Browser控件(ID为IDC_EXPLORER_NEW),利用向导生成IDC_EXPLORER的控件型变量m_newwebBrowser,
三、在原对话框(IDD_SHELL_DIALOG)中添加webbrowser控件(IDC_EXPLORER)的NewWindow3()事件,当事件触发时,显示新对话框,并用新的对话框中的webbrowser控件(IDC_EXPLORER_NEW)打开URL地址就行了
[.cpp]
void CShellDlg::NewWindow3Explorer(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
// TODO: 在此处添加消息处理程序代码
* Cancel = TRUE;
VARIANT vInfo;
CNewDlg * newdlg = new CNewDlg;
newdlg->Create(IDD_DIALOG_NEW);
newdlg->ShowWindow(SW_SHOW);
newdlg->m_newwebBrowser.Navigate(bstrUrl, &vInfo, &vInfo, &vInfo, &vInfo);
}
四、万一在新窗口中操作又产生新窗口,咋办?那就仿照第三步在新对话框(IDD_DIALOG_NEW)中添加webbrowser控件(IDC_EXPLORER_NEW)的NewWindow3()事件,反正新窗口是new的,只要一个模板就行了,不必再添加新对话框了。
[.cpp]
void CNewDlg::NewWindow3ExplorerNew(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
// TODO: 在此处添加消息处理程序代码 * Cancel = TRUE; VARIANT vInfo; CNewDlg * newdlg = new CNewDlg; newdlg->Create(IDD_DIALOG_NEW); newdlg->ShowWindow(SW_SHOW); newdlg->m_newwebBrowser.Navigate(bstrUrl, &vInfo, &vInfo, &vInfo, &vInfo);
}
注意:我把下面这些代码去掉之后就可以了
VARIANT vInfo;
CNewDlg * newdlg = new CNewDlg;
newdlg->Create(IDD_DIALOG_NEW);
newdlg->ShowWindow(SW_SHOW);
newdlg->m_newwebBrowser.Navigate(bstrUrl, &vInfo, &vInfo, &vInfo, &vInfo);
此时程序可以编译过,但是当打开新窗口时,并不会进入到OnNewWindow3Explorer1函数中;经过分析发现把事件定义稍微改一下即可
ON_EVENT(CTestIeDlg, IDC_EXPLORER1, 273 /* NewWindow3 */, OnNewWindow3Explorer1, VTS_PDISPATCH VTS_PBOOL VTS_BSTR VTS_BSTR)
改为下面内容:
ON_EVENT(CTestDlg, IDC_EXPLORER1, 273 /* NewWindow3 */, OnNewWindow3Explorer1, VTS_PDISPATCH VTS_PBOOL VTS_I4 VTS_BSTR VTS_BSTR)
VC-基础-WebBrowser控件中弹出新网页窗口的更多相关文章
- 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...
- 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容
原文:使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容 第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也 ...
- VC++ 使用WebBrowser控件中html文件以资源形式加载
. . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...
- VC++使用WebBrowser控件,强制给控件指定版本显示网页
转载:http://www.cnblogs.com/1175429393wljblog/p/5398928.html 最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. ...
- 使用WebBrowser控件播放Flash网页相关问题解决方法(转)
就是写一个类继承WebBrower控件,重写 protected override void WndProc(ref System.Windows.Forms.Message m) ...
- WPF中禁止WebBrowser控件打开新窗口
一.针对纯WPF的WebBrowser控件: <summary> Suppress Script Errors In WPF WebBrowser </summary> pub ...
- <总结>delphi WebBrowser控件的使用中出现的bug
Delphi WebBrowser控件的使用中出现的bug: 1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowse ...
- c# webBrowser控件与js的交互
转自:http://blog.csdn.net/sd2131512/article/details/7467564 [System.Runtime.InteropServices.ComVisible ...
- VB.NET让webbrowser控件中JS脚本错误最新方法(2013-09-16)
最近也是在项目中遇到了webbrowser控件中想关闭JS脚本错误窗口的问题,所以经过多次测试,终于用一段高效实用的代码完美解决webbrowser控件中JS脚本错误窗口关闭的问题. 通过创建一个子线 ...
随机推荐
- AtCoder Beginner Contest 115 题解
题目链接:https://abc115.contest.atcoder.jp/ A Christmas Eve Eve Eve 题目: Time limit : 2sec / Memory limit ...
- 压缩归档tar
一:压缩.解压 1.compress/uncompress/zcat -d:解压 -c:输出到终端,不删除原文件 -v:显示详细信息 2.gzip/ungzip/zcat -d:解压 -c:将压缩或解 ...
- jquery 更新值。。vue 如何监听?
size.val(5); // 改变值 //触发 input 事件 ie11 下不能用 size[0].dispatchEvent(new Event('input')); 有些浏览器 不支持.. ...
- AngularJs1.X学习--路由
[三种使用说明:] $stateProvider.state('station.printQRCode', { //params: { 'parentOfficeId': null }, //一次性参 ...
- spring框架详细课程视频
https://ke.qq.com/course/27346#term_id=100012852
- ubuntu操作技巧
1打开终端:ctrl+alt 2退出crtl+d
- C. Jury Marks 思维题
http://codeforces.com/contest/831/problem/C 做的时候想不到,来了个暴力. 对于每个b[i],枚举每一个a[i],就有1个可能的情况. 然后用vector存起 ...
- 网络编程——TCP协议
1.TCP程序概述 TCP是一个可靠的协议,面向连接的协议. 实现TCP程序,需要编写服务器和客户端,Java API为我们提供了java.net包,为实现网络应用程序提供类. ServerSocke ...
- webpack.config.js====CSS相关:插件optimize-css-assets-webpack-plugin
1. 安装:主要是用来压缩css文件 cnpm install --save-dev optimize-css-assets-webpack-plugin cssnano 2. webpack.con ...
- [Freemarker] Getting Start
Freemarker是一个模板引擎,在.NET中有类似的T4模板,FreeMarker对ASP.NET MVC也很友好,链接地址,引用官方的一幅图 模板+数据=视图 Following are the ...