职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 683|回复: 0

在MFC应用中深入定制WebBrowser控件

[复制链接]
醉倚西风 发表于 2011-9-27 09:51 | 显示全部楼层 |阅读模式
  正如VC ++ 6.0的演示程序MFCIE所示,用应用程序向导创建一个具有Web导航能力的MFC应用可谓轻而易举。本文在此基础上,进一步讨论两个问题:资源自包含的实现,上下文菜单以及快捷键的完全控制。
资源自包含及res协议
  所谓的资源自包含,指的是在最终产品中HTML文档(包括相关资源如脚本、图片)成为执行文件的一部分,就象其它资源(如应用程序图标)一样,而不是以独立文件形式分发。
  资源自包含不仅使产品分发更为方便,而且在最终用户面前隐藏了更多的实现细节,具有一定的现实意义。
  MFC类CHtmlView不仅把WebBrowser控件的所有功能(如导航,用户接口配置等)重新整理成为C++方法和MFC事件映射,还提供了许多“原创”的功能。其中之一便是从包含它的应用程序中读取Web页面的能力。完成这个任务的主要方法为CHtmlView:: LoadFromResource(),其原型如下:
b3ba5d16b964001d20a4e9bb.jpg

  BOOL LoadFromResource( LPCTSTR lpszResource ); //用字符串指定资源ID
  BOOL LoadFromResource( UINT nRes ); //用数字指定资源ID
  LoadFromResource()依赖于res: //协议(IE在找不到URL指定的服务器时,所显示的错误提示页面即使用res协议引出。)res协议的URL和常见的http或ftp协议所用URL格式不同,它的完整语法为:
b840549057443cdaa977a484.jpg

  res: //resource_file[/resource_type]/resource_id
  其中resource_file为包含目标资源的执行文件名字。resource_type为资源类型,它可能用数字表示,也可能用字符串表示。当资源为定制或不直接支持类型时用字符串指出资源类型(如GIF,JPEG等,可在.RC文件中定义);当资源为已知类型时该值往往用数字表示(如位图为2,HTML为23)。已知资源类型的完整列表可以参见winuser.h,它是一组RT_常量。
  CHtmlView:: LoadFromResource()总是假定目标资源所在的执行文件为当前模块。但在实际应用中,我们往往要把资源分类放在不同文件中。为解决此问题,可以定义一个派生类CHtmlViewEx覆盖此方法,只需要对原方法略作修改引入模块参数即可:

566d0fdf6ca4c54463279885.jpg

清单
  BOOL CHtmlViewEx:: LoadFromResource(LPCTSTR lpszModule, LPCTSTR lpszResource)
  {
  CString strResourceURL;
  strResourceURL.Format(_T(" res://%s/%s" ), lpszModule, lpszResource);
  Navigate(strResourceURL, 0, 0, 0);
  return TRUE;
  }
9dc3cf5889f523d6800a1886.jpg
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-3-28 18:12 , Processed in 0.153946 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表