仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 457|回复: 10
打印 上一主题 下一主题

[学习教程] ASP网页设计在MFC使用中深切定制WebBrowser控件(转...

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:58:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。web|webbrowser控件正如VC++6.0的演示程序MFCIE所示,用使用程序导游创立一个具有Web导航才能的MFC使用可谓十拿九稳。本文在此基本上,进一步会商两个成绩:资本自包括的完成,高低文菜单和快速键的完整把持。
1、资本自包括及res协定

  所谓的资本自包括,指的是在终极产物中HTML文档(包含相干资本如剧本、图片)成为实行文件的一部分,就象别的资本(如使用程序图标)一样,而不是以自力文件情势分发。

  资本自包括不但使产物分发更加便利,并且在终极用户眼前埋没了更多的完成细节,具有必定的实际意义。

  MFC类CHtmlView不但把WebBrowser控件的一切功效(如导航,用户接口设置等)从头收拾成为C++办法和MFC事务映照,还供应了很多“原创”的功效。个中之一即是从包括它的使用程序中读取Web页面的才能。完成这个义务的次要办法为CHtmlView::LoadFromResource(),其原型以下:

 BOOLLoadFromResource(LPCTSTRlpszResource);//用字符串指定资本ID
 BOOLLoadFromResource(UINTnRes);//用数字指定资本ID
  LoadFromResource()依附于res://协定(IE在找不到URL指定的服务器时,所显现的毛病提醒页面即便用res协定引出。)res协定的URL和罕见的http或ftp协定所用URL格局分歧,它的完全语法为:

 res://resource_file[/resource_type]/resource_id
  个中resource_file为包括方针资本的实行文件名字。resource_type为资本范例,它大概用数字暗示,也大概用字符串暗示。当资本为定制或不间接撑持范例时用字符串指出资本范例(如GIF,JPEG等,可在.RC文件中界说);当资本为已知范例时该值常常用数字暗示(如位图为2,HTML为23)。已知资本范例的完全列表能够拜见winuser.h,它是一组RT_常量。

  CHtmlView::LoadFromResource()老是假定方针资本地点的实行文件为以后模块。但在实践使用中,我们常常要把资本分类放在分歧文件中。为办理此成绩,能够界说一个派生类CHtmlViewEx掩盖此办法,只必要对原办法略作修正引进模块参数便可:

 『清单1』
 BOOLCHtmlViewEx::LoadFromResource(LPCTSTRlpszModule,LPCTSTRlpszResource)
 {
 CStringstrResourceURL;
 strResourceURL.Format(_T("res://%s/%s"),lpszModule,lpszResource);
 Navigate(strResourceURL,0,0,0);
 returnTRUE;
 }
  2、高低文菜单和快速键把持

  在实践使用中,为了不用户检察页面源文件或避免用户用快速键翻开以后页面的别的一个窗口,我们常常要对由WebBrowser控件供应的高低文菜单(在页面上按鼠标右键)或快速键(如Ctrl+N翻开新窗口)加以定制。

  不管是WebBrowser控件仍是CHtmlView类都没有间接供应定制上述操纵的办法,因此必需经由过程完成IDocHostUIHandler接口来完成。在该接口中,能够完成高低文菜单和快速键把持的办法分离为ShowContextMenu()和TranslateAccelerator()。

  因为利用MFC封装类CHtmlView比间接使用WebBrowser控件更加便利,因此能够思索把定制以后的接口撑持功效集成到MFC框架内。详细完成的基础思绪以下:

创立一个新的OLE客户站并在个中完成接口IDocUIHandler
在InitInstance()顶用一个新的办理类代替缺省设置以引进该客户站
  基于以上思绪,我们能够从COleControlSite创立派生类CCustomWebBrowserSite,并在派生类中完成IDocHostUIHandler。COleControlSite在VC++的mfcsrcoccimpl.h中界说,用于封装控件客户站。新的客户站界说为:

 『清单2』
 classCCustomWebBrowserSite:publicCOleControlSite
 {
 public:
 CCustomWebBrowserSite(COleControlContainer*pCnt):
 COleControlSite(pCnt){}
 protected:
 DECLARE_INTERFACE_MAP();
 BEGIN_INTERFACE_PART(DocHostUIHandler,IDocHostUIHandler)
 STDMETHODIMPShowContextMenu(DWORD,POINT*,IUnknown*,IDispatch*);
 STDMETHODIMPTranslateAccelerator(LPMSG,constGUID*,DWORD);
 STDMETHODIMPGetHostInfo(DOCHOSTUIINFO);
 STDMETHODIMPEnableModeless(BOOL);
 STDMETHODIMPOnDocWindowActivate(BOOL);
 STDMETHODIMPOnFrameWindowActivate(BOOL);
 STDMETHODIMPResizeBorder(LPCRECT,IOleInPlaceUIWindow*,BOOL);
 STDMETHODIMPGetOptionKeyPath(LPOLESTR*,DWORD);
 STDMETHODIMPGetDropTarget(IDropTarget*,IDropTarget**);
 STDMETHODIMPGetExternal(IDispatch**);
 STDMETHODIMPTranslateUrl(DWORD,OLECHAR*,OLECHAR**);
 STDMETHODIMPFilterDataObject(IDataObject*,IDataObject**);
 STDMETHODIMPShowUI(DWORD,IOleInPlaceActiveObject*,
 IOleCommandTarget*,IOleInPlaceFrame*,IOleInPlaceUIWindow*);
 STDMETHODIMPHideUI(void);
 STDMETHODIMPUpdateUI(void);
 END_INTERFACE_PART(DocHostUIHandler)
 };
  如上所先容,在这个接口中我们感乐趣的办法次要有ShowContextMenu()和TranslateAccelerator()两个。以完整克制高低文菜单显现为例,在派生类CCustomWebBrowserSite中ShowContextMenu()的完成代码为:

 『清单3』
 STDMETHODIMPCCustomWebBrowserSite::XDocHostUIHandler::ShowContextMenu(
 DWORD,POINT*,IUnknown*,IDispatch*)
 {
 METHOD_PROLOGUE(CCustomWebBrowserSite,DocHostUIHandler)
 returnS_OK;//克制菜单显现
 }
  用相似的办法能够封闭由控件间接呼应的快速键:

 『清单4』
 STDMETHODIMPCustomWebBrowserSite::XDocHostUIHandler::TranslateAccelerator(LPMSGlpMsg,constGUID__RPC_FAR*pguidCmdGroup,DWORDnCmdID)
 {
 METHOD_PROLOGUE(CCustomWebBrowserSite,DocHostUIHandler)
 returnS_OK;//封闭快速键
 }
  在IDocHostUIHandler接话柄现以后,我们还必要一个办理类CCustomOccManager来撑持CCustomWebBrowserSite,新的办理类CCustomOccManager从COccManager派生,COccManager也在mfcsrcoccimpl.h中界说:

 『清单5』
 classCCustomOccManager:publicCOccManager
 {
 public:
 CCustomOccManager(){}
 COleControlSite*CreateSite(COleControlContainer*pCC)
 </p>无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;
兰色精灵 该用户已被删除
沙发
发表于 2015-1-20 06:52:17 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-23 18:27:34 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
精灵巫婆 该用户已被删除
地板
发表于 2015-1-25 13:41:13 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
再现理想 该用户已被删除
5#
发表于 2015-1-25 22:16:34 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
若相依 该用户已被删除
6#
发表于 2015-2-4 06:12:05 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
透明 该用户已被删除
7#
发表于 2015-2-9 17:13:39 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
金色的骷髅 该用户已被删除
8#
发表于 2015-2-27 12:38:08 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
小妖女 该用户已被删除
9#
发表于 2015-3-9 03:45:25 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
admin 该用户已被删除
10#
发表于 2015-3-16 20:17:18 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
灵魂腐蚀 该用户已被删除
11#
发表于 2015-3-23 00:46:12 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 10:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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