// 显示一个空白网页

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

/

……

二、屏蔽 IE 控件的上下文菜单

屏蔽或自定义 IE 控件的上下文菜单,其实就是需要实现 IDocHostUIHandler 接口中的 ShowContextMenu 方法。如果使用 ATL 编写程序,我认为实现是比较简单的

(也许是我使用 ATL 写 COM 比 MFC 熟悉一些的因素吧)。事例程序由于用 MFC 书写,真是搞的我头晕眼花,翻箱倒柜终于找到了微软书写的演示代码,于是我就直接复

制过来使用了。(换句话说,读者在阅读这部分代码的时候,如果有问题可不要问我。你直接打电话去咨询 Microsoft 哈。)

三、扩展 HTML 脚本中的 external 对象

从 CCmdTarget 派生一个自动化对象(新建C++类的时候,注意别忘了选择 Automation)。在这个类里,你可以使用 ClassWizard 的 Automation 卡片,添加自定义

的方法和属性。而在 HTML 的脚本程序中,就可以使用 window.external 进行调用了。用这个方法,实现了对 HTML 脚本功能的扩充。在 HTML 脚本和自动化对象之间要

建立起关系,则需要实现 IDocHostUIHandler::GetExternal() 方法。

四、显示 HTML 样式的对话窗

这节内容是本文的重点。

用户的界面设计经历了若干个发展阶段。最早的程序设计,可以说没有用户界面;然后发展出一些简单的与用户交互的界面(控制台界面,全屏文本界面);再然后发

展出了图形界面。其实我们现在的商业程序设计中,界面的处理代码占用了很大的篇幅。为了使界面的处理变得简单、通用、易修改维护,人们制作了很多的界面程序库。

说实在话,大多数的界面程序库由于封装的不好,一是不灵活,二是经常需要修改它内部的 BUG,重用的效果并不理想。通用的换肤软件也只能实现对标准的窗口类进行皮

肤美化,对自定义的窗口类还是需要自己写钩子。咳……

现在,我们已经有一个非常好的方法进行界面设计了,那就是使用 HTML(使用 Visual Studio.net 的程序员,一定对 .net 的界面很喜欢吧?!.net 开发环境,无

处不在使用 HTML 方式的界面)。即使是一个完全地道的本地软件(非B/S软件),也可以使用本地 ASP 方式,HTA 方式进行程序设计。软件用户非常喜欢这样的程序,

因为他早就熟悉并掌握了浏览器的操作,另外,对于程序员来说,也非常喜欢这种方式,因为不会再为换肤,不同用户不同的界面特化而伤脑筋了。

微软将要在下一代的程序设计中使用 XML 来描述用户界面。这种设计方式将会解放你、我这样的程序员,把咱们的工作量全部都转化到美工师那里去了:) 借

vckbase 的平台,现在呼吁大家,尽快学习和掌握 HTML、XML 的设计和脚本编程,并能熟练地对它们与 C++ 对象的交互进行编程。可以预计在未来的两三年内,拥有这样

水平的程序员,一定会开始吃香饽饽了,嘿嘿……

下面,就如何显示一个 HTML 对话窗,开始我们未来软件方式的编程吧。

我们要调用 MSHTML.DLL 中的一个函数 ShowHTMLDialog(Ex) 来完成 HTML 对话窗的显示和数据交互。这个函数的声明是:HRESULT ShowHTMLDialogEx(

HWND hwndParent,

IMoniker *pMk,

DWORD dwDialogFlags,

VARIANT *pvarArgIn,

WCHAR *pchOptions,

VARIANT *pvarArgOut

);

c语言 操作ie文本框,IE控件一些高级使用方法相关推荐

  1. IE 控件一些高级使用方法

    IE 控件一些高级使用方法 作者:杨老师 下载源代码 本文介绍如下内容 1.如何显示内存中的 HTML 网页: 2.如何屏蔽掉鼠标右键的上下文菜单: 3.如何扩展 HTML 中的脚本(external ...

  2. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  3. Android相对布局(RelativeLayout)常用属性、练习使用按键、文本框等控件、线性布局(LinearLayout)属性

    RelativeLayout中子控件常用属性: 子控件默认是从父控件的左上角开始排列的 相对于父控件 android:layout_alignParentTop="true" 和父 ...

  4. VC++静态文本框/PICTURE控件的notify属性

    RT,该属性对应的是SS_NOTIFY,但是很多人误以为是WM_NOTIFY .该属性可以用ModifyStyle函数修改.

  5. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  6. 【转】“线程间操作无效: 从不是创建控件的线程访问它”

    经典解决"线程间操作无效: 从不是创建控件的线程访问它" 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个 ...

  7. 为触屏手机而设计系列1—拇指操作的热区死角与控件尺寸

    Part 1 研究背景 1.1 触屏手机界面设计的背景与挑战 挑战1:发展时间短,国内外的研究都尚处在探索阶段,充满未知和不确定. 触屏技术最早被应用到手机上要追溯到1999年(motorola A6 ...

  8. 为触屏手机而设计系列1——拇指操作的“热区/死角”与“控件尺寸”

    Part 1 研究背景 1.1 触屏手机界面设计的背景与挑战 挑战1:发展时间短,国内外的研究都尚处在探索阶段,充满未知和不确定.  触屏技术最早被应用到手机上要追溯到1999年(motorola A ...

  9. VC6.0 MFC 列表框 列表控件 添加 修改 删除

    VC6.0 MFC 列表框 列表控件 添加 修改 删除 写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧! 一.未卜先知 1.编译运行后,点击"学 ...

最新文章

  1. Facebook开源多款AI工具,支持游戏、翻译等
  2. 《构建可扩展的Web站点》书评
  3. 写一个不能被继承的类(友元的不可继承性)
  4. 7-2 港口审查 (15 分)
  5. 有关系统环境变量的设置问题
  6. 中间固定两边自适应 两边固定中间自适应 promise
  7. cortex m4 中文手册_奥迪RS4 Avant都来了,新一代宝马M4还会远吗?
  8. 《Photoshop Lightroom4 经典教程》—第1课复习题答案
  9. 44 岁的微软下一步是什么?
  10. 加速深度学习在线部署,TensorRT安装及使用教程
  11. 算法:回溯十二 Word Search字符串匹配二维矩阵
  12. 【机器学习】分类性能度量指标 : ROC曲线、AUC值、正确率、召回率、敏感度、特异度
  13. 网络文化经营许可证这样办,省时又便捷!
  14. 三角学(一)公式,恒等式,函数和难题
  15. 征稿 | 听你聊科研,轻松赚稿费!
  16. C/C++知识总结 四 循环与分支语句
  17. python打印26个英文字母和数字
  18. 基于用户的产品分析之Cohort Analysis(群组分析,留存分析)
  19. Project directory ‘x/x/x‘ is not part of the build defined by settings file ‘x/x/x‘. If this is ...
  20. 脏读、幻读、不可重复读,傻傻分不清楚

热门文章

  1. 独立端漫画小程序源码/看漫画微信小程序源码
  2. golang汉字转拼音字头和五笔码
  3. pdf中怎么编辑修改内容
  4. 一劳永逸 Win XP安装盘中集合驱动程序
  5. 对slideToggle()的进一步了解
  6. 点击滑动(slideToggle)
  7. 通过jQuery的slideToggle()方法实现元素的显示隐藏时,利用当前ul元素display的值判断状态遇到的问题
  8. 解决量产工具导致Intel(R) 6 Series/C200 Series Chipset Family USB Enhanced Host Controller - 1C26驱动感叹号
  9. Mysql查询语句正则匹配
  10. Android手机流量分析工具介绍