首先用VS2008新建基于对话框的MFC应用程序,添加webbrowser控件,Navigate导航!

具体看上篇blog

http://blog.csdn.net/LightBoat09/archive/2010/12/14/6074967.aspx

本篇的工程是在上篇的工程项目进行添加...

一,新建对话框

ID 为 IDD_DIALOG_NEW

对话框的Minimize Box属性设为True,

Maximize Box属性也设为True,

二,添加webbrower控件

资源对话框上右击选择[插入ActiveX控件],选择[Microsoft Web Browser],点击"确认",

设置ID为IDC_EXPLORER_NEW

三,添加对话框类

资源对话框上右击--->[添加类],弹出“MFC 类向导"

输入类名:CNewDlg,

基类默认是CDialog,

点击"完成"

四,添加webbrowser控件型变量

在类窗口里选择"CNewDlg",选中右击--->[添加]--->[添加变量],弹出“添加成员变量向导”对话框

选择"控件变量"(check BOX框),控件ID选择IDC_EXPLORER_NEW,变量名输入m_newwebBrowser,点击“完成”!

五,现在要做的是弹出新网页窗口时显示在自己建的对话框里

那改写以前(上篇blog)的NewWindow3Explorer1()函数

void CbrowserDlg::NewWindow3Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl) { // TODO: 在此处添加消息处理程序代码 * Cancel = TRUE; CString strUrl; strUrl = bstrUrl; // 新建对话框 CNewDlg *pNewDlg = new CNewDlg; pNewDlg->Create(IDD_DIALOG_NEW, this); pNewDlg->ShowWindow(SW_SHOW); // 网页导航,新的对话框中的webbrowser控件! VARIANT vInfo; VariantInit(&vInfo); pNewDlg->m_newwebBrowser.Navigate(strUrl, &vInfo, &vInfo, &vInfo, &vInfo); } 现在可以试验下,在新窗口打开,显示在自己的对话框里,对话框可能有点小,

要想全屏的话,重载CNewDlg对话框类的OnInitDialog()函数,具体做法:

六,重载OnInitDialog()函数

在类窗口里选择"CNewDlg",进入[属性],点击[重写],  (位于[事件]、[消息]图标之后,还记得闪电图标吗?在那之后第二个...)

点击OnInitDialog,添加OnInitDialog函数即可,系统会自动生成代码,再在代码中添加最大化设置...

BOOL CNewDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 ShowWindow(SW_SHOWMAXIMIZED); //窗口最大化 CRect rect; GetClientRect(&rect); // 设置WebBrowser控件位置 m_newwebBrowser.MoveWindow(0, 0, rect.Width(), rect.Height()); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }

现在还有个问题,在新的窗口里又弹出新的窗口怎么办...???

可以试下在百度里搜索百度网址,进入打开,这时在新对话框窗口弹出百度页主页,

接着搜百度主页,进入打开,这时又在IE窗口打开,失去控制了,。。。

不要慌,在窗口里生成新窗口就行了...也是添加NewWindow3消息处理,步骤如下:

七,给新对话框CNewDlg的webbrowser控件添加NewWindow3消息处理

进入资源窗口,这次是新对话框IDD_DIALOG_NEW,再至webbrowser控件(IDC_EXPLORER_NEW)属性窗口,

点击控件事件(闪电状图标),找到NewWindow3,点击后右边有添加NewWindow3ExplorerNew,代码会自动生成

再NewWindow3ExplorerNew里添加代码,其实和第五步的NewWindow3Explorer1()一样...

void CNewDlg::NewWindow3ExplorerNew(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl) { // TODO: 在此处添加消息处理程序代码 * Cancel = TRUE; CString strUrl; strUrl = bstrUrl; // 新建对话框 CNewDlg *pNewDlg = new CNewDlg; pNewDlg->Create(IDD_DIALOG_NEW, this); pNewDlg->ShowWindow(SW_SHOW); // 网页导航,新的对话框中的webbrowser控件! VARIANT vInfo; VariantInit(&vInfo); pNewDlg->m_newwebBrowser.Navigate(strUrl, &vInfo, &vInfo, &vInfo, &vInfo); }

现在就可以从前有座山,山里有个庙,庙里...一直下去了,,,有兴趣可以试试...

可以缩小窗口看下诸多排列窗口的效果...

至此结束...

八,还有个非常严重的问题,内存泄漏...

C++里就很清楚,new的就得delete...

当然如果你能直接delete pNewDlg,那最好不过,实际中pNewDlg已消失无踪了...

我们重载CNewDlg对话框的OnCancel(),OnOK() 和WM_NCDESTROY消息事件

void CNewDlg::OnCancel() { // TODO: 在此添加专用代码和/或调用基类 //CDialog::OnCancel(); DestroyWindow(); } void CNewDlg::OnOK() { // TODO: 在此添加专用代码和/或调用基类 //CDialog::OnOK(); DestroyWindow(); } void CNewDlg::OnNcDestroy() { CDialog::OnNcDestroy(); // TODO: 在此处添加消息处理程序代码 delete this; }

九,打开网页,关闭网页后还是会发现内存增得多,减的少

这个微软的IE内核就是烂,你用IE打开网页,在任务管理器里查看内存,也是增得多,减的少,

google浏览器chrome也好不到哪去...

据说opera控制的是最好的(我没试过)

若想用代码控制这些,可参看http://support.microsoft.com/kb/262110/zh-cn

是VB写的,我VB忘得差不多了,有空再去转换为VC!

也难怪是Visual Basic写的,比尔盖茨当年豪气冲天,说:"我敢以BASIC挑战任何人,也欢迎任何人以BASIC来挑战我!"

弹出新网页在新的对话框中打开相关推荐

  1. 网页退出弹出新网页或者收藏夹

    今天有大虾再问:有没有办法,wordpress建的站,也是DUX主题,在退出首页时打开另外一个网址或者2个网址,(只是退出首页时,并且所有浏览器都能行?) 这里也是帮你找了一下相关的代码,然后讲解一下 ...

  2. IE7.0 中设置选项卡中的在新的窗口中打开网页(注册表)

    打开注册表,找到对应的项,然后修改值: [HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/TabbedBrowsing] "Po ...

  3. 设置超链接在新的窗口中打开,而不是在本窗口中打开

    <a> 标签的 target 属性规定在何处打开链接文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称 ...

  4. primefaces_PrimeFaces:在动态生成的对话框中打开外部页面

    primefaces 我已经在即将出版的PrimeFaces Cookbook版本2中写过一篇食谱的博客. 在这篇文章中,我想发表第二篇关于一个名为Dialog Framework的小型框架的文章. ...

  5. PrimeFaces:在动态生成的对话框中打开外部页面

    我已经在即将出版的PrimeFaces Cookbook 2版中写了一篇关于食谱的博客. 在这篇文章中,我想发表第二篇关于一个名为Dialog Framework的小型框架的文章. 我个人喜欢它,因为 ...

  6. html5 在新标签页打开,Chrome,Javascript,window。在新标签页中打开

    小编典典 您不能直接控制它,因为它是由Internet Explorer用户控制的选项. 使用Window.open使用不同的窗口名称打开页面将在新的浏览器窗口(如弹出窗口)中打开,或者在用户配置的浏 ...

  7. 始终在新标签页中打开文件

    本文翻译自:Open files always in a new tab I am using Visual Studio Code 1.3.1 with the newly introduced t ...

  8. Vue中使用a标签实现点击在新标签页中打开实现照片预览

    场景 显示某抓拍系统的照片,在点击该照片后面的预览时,在新标签页中打开图片的网络URL地址. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众 ...

  9. 谷歌搜索结果在新标签页中打开

    百度搜索结果默认[搜索结果在新标签页中打开] 谷歌搜索结果默认[搜索结果在当前标签页中打开] 习惯了使用百度,刚刚用谷歌不习惯,那怎样设置呢?? 话不多说,看图... 对你有帮助请点个 "赞 ...

最新文章

  1. 【 Notes 】NLS ALGORITHMS of TOA - Based Positioning
  2. Memcached深度分析【转载】
  3. Stanford机器学习笔记-4. 神经网络Neural Networks (part one)
  4. python读写excel模块pandas_Python3使用pandas模块读写excel操作示例
  5. java流读写_java流概述以及文件读写示例
  6. python *args用法_python函数参数*args**kwargs用法实例
  7. 【codevs2455】繁忙的都市
  8. php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
  9. python对指定字符串寻找回文子序列的最小划分
  10. poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
  11. SQL数据导出至Excel
  12. Java EE开发 十大官方参考书手册
  13. html 预加载图片,实现网页图片预加载的几个方法
  14. 泛微E8的数据展示集成方法
  15. 型钢截面特性_工字钢与H型钢有什么区别,为何会有两种钢型结构?
  16. cookie httponly ajax,为什么jquery的.ajax()方法没有发送我的会话cookie?
  17. 计算机找网络共享盘快捷键,电脑共享快捷键不见了怎么办
  18. OpenGL ES (二)EGL介绍和使用
  19. JavaScript数组属性和方法
  20. 抖音上的python课程_如何用Python抓抖音上的小姐姐

热门文章

  1. win7 docker的受难记——exit status 255的终极解决
  2. 个人申请专利的费用是多少?
  3. MATLAB 7.0 无法卸载的解决方法
  4. PTA 古风排版 (20 分)含测试点
  5. 最新深信服面试笔试题
  6. [乐意黎原创]PHP启用session后抛 session_start(): open(/var/lib/php/session/sess_... 的解决办法
  7. 原来RA是Router Advertisement的意思
  8. librosa audioread.NoBackendError
  9. 编程世界,我的世界。
  10. 元宇宙岗位薪资排行榜,出炉!