您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:109 来源:vckbase.com

本文章共4640字,分3页,当前第1页,快速翻页:
 

IE 控件一些高级使用方法

作者:杨老师

下载源代码
逆@风@者

本文介绍如下内容

1、如何显示内存中的 HTML 网页;
2、如何屏蔽掉鼠标右键的上下文菜单;
3、如何扩展 HTML 中的脚本(external)对象;
4、如何显示 HTML 样式的对话窗;
5、如何执行 HTML 脚本;


一、如何显示内存中的 HTML 网页

  或者因为网页保密的考虑;或者因为软件分发的考虑,有的时候就需要让 IE 或 IE 浏览器控件显示内存或资源中的 HTML 网页。在 MFC 中,CHtmlView::LoadFromResource() 可以显示程序资源中的 HTML 内容。我们都知道MFC的 CHtmlView 其实是对 IWebBrowser2 的一个包装,但是在 IWebBrowser2 中却没有类似的方法。那么它是如何实现的那?步骤如下:
  1、首先通过 IWebBrowser2::Navigate2() 显示一个网页,其目的是产生有效的对象,从而得到 IHTMLDocument2 接口;
  2、IWebBrowser2::get_Document() 得到 IHTMLDocument2 接口指针;
  3、IHTMLDocument2::QueryInterface() 得到 IPersistStreamInit 接口指针;
  4、IPersistStreamInit::InitNew() 初始化接口对象;
  5、IPersistStreamInit::Load() 装载内存中的 HTML 数据流(IStream *);
   内存指针转换为流的方法是:
   I、 GlobalAlloc() 申请内存;
   II、 复制 HTML 字符串内容到上述的内存中;
   III、 CreateStreamFromHGlobal() 转换内存为 IStream 指针;
  原理性代码如下:

	// 显示一个空白网页

	m_ie.Navigate2( &CComVariant(_T("about:blank")),NULL,NULL,NULL,NULL);

	// 得到 IHTMLDocument2 指针

	CComPtr< IDispatch > spDoc(m_ie.GetDocument());

	// 得到 IPersistStreamInit 指针

	CComQIPtr< IPersistStreamInit, &IID_IPersistStreamInit > spPSI( spDoc );

	// 申请内存,复制 HTML 字符串

	LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR, ::lstrlen( lpHtml ) 1 );

	lstrcpy( lpMem, "xxx xxx" );

	// 转换内存为流对象指针

	CComPtr< IStream > spStream;

	CreateStreamOnHGlobal( lpMem, TRUE, &spStream );

	// 初始化后,装载显示

	spPSI->InitNew();

	spPSI->Load( spStream );




图一、IE控件显示内存中的 HTML 文件    图二、HTML对话窗

  IE 所能支持的数据传输协议,除了大家所熟悉的 http、ftp、file......还有一个协议是 res ,它表示浏览显示文件中的 HTML 资源。你可以在 IE 的地址栏上直接输入这样格式的 URL:"res://文件名/资源名"。
  把 HTML 文件加入到程序资源的方法比较简单,在资源卡片中,鼠标右键弹出菜单,执行 Import...(引入),选择指定的 HTML 文件,然后给一个资源名称即可。(在这里,最方便的资源名称用字符串比较好,如果使用整数ID,那么将来在使用的时候是这样的格式:res://文件名/#101,这里假设 101 是资源的ID号。真麻烦!我不太喜欢这样的方式。)对于图片文件等其它的附件,则需要手工编辑资源 RC 文件(用 IDE 环境引入,它会试图用文本方式打开一个2进制文件,多数情况下会“死机”)。下图是事例程序引入资源后的样式:


图三、HTML 资源的引入

手工编辑 RC 文件的部分是:

......

/////////////////////////////////////////////////////////////////////////////

//

// HTML

//



HTML_TOWORD       HTML  DISCARDABLE   "res\\ToWord.htm"	// 这两个是HTML文件,可以引入

HTML_DLG        HTML  DISCARDABLE   "res\\html_dlg.htm"

~SEND_R1_C1.GIF     HTML  DISCARDABLE   "res\\~Send_r1_c1.gif"	// 下面的是GIF文件,需要手工加入

~SEND_R1_C2.GIF     HTML  DISCARDABLE   "res\\~Send_r1_c2.gif"

LOGO.GIF        HTML  DISCARDABLE   "res\\Logo.gif"

SEND_R1_C1.GIF      HTML  DISCARDABLE   "res\\Send_r1_c1.gif"

SEND_R1_C2.GIF      HTML  DISCARDABLE   "res\\Send_r1_c2.gif"

SPACER.GIF        HTML  DISCARDABLE   "res\\spacer.gif"

#endif  // Chinese (P.R.C.) resources

/////////////////////////////////////////////////////////////////////////////

...... 
 
本文章更多内容1 - 2 - 3 - 下一页>>
相关文章

多功能标签CLabelEx
自己编的SQL服务端加客户端
简单快速的哈夫曼编码
谈谈软件项目管理的重要性
检测:.NET中强大的检测选项让你有信心建立
一个生成公章图片的简易工具
KVIP考勤系统
Windows SDK笔记(七):创建MDI窗口
基于 SSL 的 ASP.NET Web 应用测试自动化
层叠式窗体控件指南
用VC 创建自定义向导程序
如何在 Windows NT、Windows 2000 和 Windo
对C#中的TreeView加背景图
static_cast<>揭密
自己写 FILTER 改变画面颜色
如何去掉浮动工具条中的“关闭”按钮
ResizeParentToFit,destructors及其他
Javascript - Prototype Based Language
函数功能流程图,in as,line feed
使用VC ATL实现Office的COM插件

相关评论


本文章所属分类:首页 VC++

  热门关键字: