用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控件中弹出新网页窗口的更多相关文章

  1. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件

    原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...

  2. 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容

    原文:使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容 第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也 ...

  3. VC++ 使用WebBrowser控件中html文件以资源形式加载

    . . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...

  4. VC++使用WebBrowser控件,强制给控件指定版本显示网页

    转载:http://www.cnblogs.com/1175429393wljblog/p/5398928.html 最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. ...

  5. 使用WebBrowser控件播放Flash网页相关问题解决方法(转)

    就是写一个类继承WebBrower控件,重写 protected   override   void   WndProc(ref   System.Windows.Forms.Message   m) ...

  6. WPF中禁止WebBrowser控件打开新窗口

    一.针对纯WPF的WebBrowser控件: <summary> Suppress Script Errors In WPF WebBrowser </summary> pub ...

  7. <总结>delphi WebBrowser控件的使用中出现的bug

    Delphi WebBrowser控件的使用中出现的bug:  1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowse ...

  8. c# webBrowser控件与js的交互

    转自:http://blog.csdn.net/sd2131512/article/details/7467564 [System.Runtime.InteropServices.ComVisible ...

  9. VB.NET让webbrowser控件中JS脚本错误最新方法(2013-09-16)

    最近也是在项目中遇到了webbrowser控件中想关闭JS脚本错误窗口的问题,所以经过多次测试,终于用一段高效实用的代码完美解决webbrowser控件中JS脚本错误窗口关闭的问题. 通过创建一个子线 ...

随机推荐

  1. 让你的Kivy支持中文字符

    前言 默认Kivy字体不支持中文,本文简单描述如何让你的应用支持中文字符 代码 from kivy.app import App from kivy.core.text import LabelBas ...

  2. 同源策略与CORS跨域请求

    一.同源策略 1.简介 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源 ...

  3. mac终端快捷键

    mac终端快捷键: http://www.jianshu.com/p/e6c364084c22

  4. 全排列函数(next_permutation)

    顾名思义,这个函数就是用来求数组的全排列的,至于怎么用,看下面的介绍: 这是一个c++函数,包含在头文件algorithm里面,这个函数可以从当前的数组的大小按照字典序逐个递增的顺序排列 看下面的模板 ...

  5. c/c++ socket发送http请求访问网站

    这几天课比较少,校园网上网要认证才能上网,每次必须输入学号密码,为了方便,写了一个自动登录以及如果在线,登录自服务系统强制下线的小工具. 强制下线思路:获取sessionID----------> ...

  6. 在loader程序中涉及到的CPU模式切换

    在实模式下开启4GB的物理内存地址寻址(称之为Big Real Mode) 通过A20快速门(Fast Gate)修改0x90端口的数据, 对其进行置位(类似于打开一个开关), 开启 使用CLI汇编指 ...

  7. SOA框架

    SOA是什么 估计很多人都听说过SOA这个词了,但是很多人还是不知道到底什么是SOA.开发人员很容易理解为是一个Web Service,但是这绝对不是SOA,那顶多只能算是SOA的一种实现方法.那么, ...

  8. idea没有绑远程地址,如何提交到github的空项目

    一 有同事问我怎么提交到github的空项目....这么简单.... 二 1.创建本地的git仓库 选择自己的项目 创建成功 2.添加代码,选中左边的文件,add 3.提交 5.定义远程仓库,不定义的 ...

  9. ADODB.Stream在进行文件上传时报错

    最近在做web项目,有个控件是上传材料文件和文件夹,本地运行正常,放到服务器上,一直报错:AutoRuntime服务器无法创建..... 解决方法: 1.配置ie浏览器的安全级别 2.修改ie浏览器对 ...

  10. Linux常用命令汇总(渐更)

    后台启动jar nohup java -jar xxxxx.jar > xxxx.out 2>&1 & 封禁ip iptables -I INPUT -s 200.194. ...