弹出新网页在新的对话框中打开
首先用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来挑战我!"
弹出新网页在新的对话框中打开相关推荐
- 网页退出弹出新网页或者收藏夹
今天有大虾再问:有没有办法,wordpress建的站,也是DUX主题,在退出首页时打开另外一个网址或者2个网址,(只是退出首页时,并且所有浏览器都能行?) 这里也是帮你找了一下相关的代码,然后讲解一下 ...
- IE7.0 中设置选项卡中的在新的窗口中打开网页(注册表)
打开注册表,找到对应的项,然后修改值: [HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/TabbedBrowsing] "Po ...
- 设置超链接在新的窗口中打开,而不是在本窗口中打开
<a> 标签的 target 属性规定在何处打开链接文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称 ...
- primefaces_PrimeFaces:在动态生成的对话框中打开外部页面
primefaces 我已经在即将出版的PrimeFaces Cookbook版本2中写过一篇食谱的博客. 在这篇文章中,我想发表第二篇关于一个名为Dialog Framework的小型框架的文章. ...
- PrimeFaces:在动态生成的对话框中打开外部页面
我已经在即将出版的PrimeFaces Cookbook 2版中写了一篇关于食谱的博客. 在这篇文章中,我想发表第二篇关于一个名为Dialog Framework的小型框架的文章. 我个人喜欢它,因为 ...
- html5 在新标签页打开,Chrome,Javascript,window。在新标签页中打开
小编典典 您不能直接控制它,因为它是由Internet Explorer用户控制的选项. 使用Window.open使用不同的窗口名称打开页面将在新的浏览器窗口(如弹出窗口)中打开,或者在用户配置的浏 ...
- 始终在新标签页中打开文件
本文翻译自:Open files always in a new tab I am using Visual Studio Code 1.3.1 with the newly introduced t ...
- Vue中使用a标签实现点击在新标签页中打开实现照片预览
场景 显示某抓拍系统的照片,在点击该照片后面的预览时,在新标签页中打开图片的网络URL地址. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众 ...
- 谷歌搜索结果在新标签页中打开
百度搜索结果默认[搜索结果在新标签页中打开] 谷歌搜索结果默认[搜索结果在当前标签页中打开] 习惯了使用百度,刚刚用谷歌不习惯,那怎样设置呢?? 话不多说,看图... 对你有帮助请点个 "赞 ...
最新文章
- 【 Notes 】NLS ALGORITHMS of TOA - Based Positioning
- Memcached深度分析【转载】
- Stanford机器学习笔记-4. 神经网络Neural Networks (part one)
- python读写excel模块pandas_Python3使用pandas模块读写excel操作示例
- java流读写_java流概述以及文件读写示例
- python *args用法_python函数参数*args**kwargs用法实例
- 【codevs2455】繁忙的都市
- php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
- python对指定字符串寻找回文子序列的最小划分
- poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
- SQL数据导出至Excel
- Java EE开发 十大官方参考书手册
- html 预加载图片,实现网页图片预加载的几个方法
- 泛微E8的数据展示集成方法
- 型钢截面特性_工字钢与H型钢有什么区别,为何会有两种钢型结构?
- cookie httponly ajax,为什么jquery的.ajax()方法没有发送我的会话cookie?
- 计算机找网络共享盘快捷键,电脑共享快捷键不见了怎么办
- OpenGL ES (二)EGL介绍和使用
- JavaScript数组属性和方法
- 抖音上的python课程_如何用Python抓抖音上的小姐姐
热门文章
- win7 docker的受难记——exit status 255的终极解决
- 个人申请专利的费用是多少?
- MATLAB 7.0 无法卸载的解决方法
- PTA 古风排版 (20 分)含测试点
- 最新深信服面试笔试题
- [乐意黎原创]PHP启用session后抛 session_start(): open(/var/lib/php/session/sess_... 的解决办法
- 原来RA是Router Advertisement的意思
- librosa audioread.NoBackendError
- 编程世界,我的世界。
- 元宇宙岗位薪资排行榜,出炉!