文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发.Net 专栏 → .NET Compact Framework通过托管Win32代码获得HtmlDocument

.NET Compact Framework通过托管Win32代码获得HtmlDocument

时间:2010/2/15 18:08:00来源:本站整理作者:我要评论(0)

.NET Compact Framework通过托管Win32代码获得HtmlDocument:

  问题引入:   

  有过CF的项目经验的朋友一定常常遇到与BS后台对接的问题,HTML在BS系统中有着得天独厚的条件,他能够直接被用作界面显示,并且能够被C#代码和Javascript操作,因此在一些应用中BS系统可能采取在数据库中存储HTML表单的设计,例如一些表单可视化设计控件(Table Designer)生成的就是HTML,直接存储HTML的好处在于绕过了解析HTML DOM的复杂性,可是在前端与之对接的Mobile应用程序中就带来的问题,当我的.NET CF程序读取到包含HTML的字段后就显得很尴尬了,用正则表达式解析HTML生成WinFom界面显然不切实际,然而.NET CF似乎只为我们提供了这么一条路,因为如果用WebBroswer(以下简称WB)控件直接显示HTML,很有可能因为HTML的规格不适合PDA屏幕而使得用户体验非常糟糕,一个常见的问题就是HTML FORM的宽度超出了Mobile设备屏幕范围,而使得WB出现横向滚动条,这还不是问题的关键,关键在于你将HTML交给了WB控件之后你就没有任何控制权了,WebBrowser类为我们提供的唯一和HTML交互手段是一个叫DocumentText的属性,遗憾的是该属性是SetOnly的,也就是说只有Set访问器,那么获取表单中输入的数值就不可能了。这个问题在Full Framework(以下简称FF)中是不存在的,因为FF中的WebBroswer类为我们提供了Document属性,它返回类型为HtmlDocument的HTML DOM结构,借助该属性可以轻松的完成HTML交互任务。对于上述问题我的思路还是使用HTML DOM模型来和HTML交互,如果您使用过WebBroswer.Document属性来操作HTML,那么您应该知道HtmlDocument只不过是封装了COM接口IHTMLDocument2的对象而已,他的大部分功能都是COM中提供的,那么CF里这个接口要怎么引入呢?这就是本文要解决的问题.

  解决之道:

  解决上述问题并不需要造原子弹的技术,不过阅读以下内容之前您需要具备Windows COM知识和.NET Compact Framework中P/Invoke基础知识,这里不需要您了解Data layout,但至少您要知道C++中的char*封送为string,不过作为CF开发者,我建议您还是深入学习P/Invoke,如果您没有这些知识那么我推荐您先阅读以下文章:

  http://msdn.microsoft.com/en-us/library/aa446529.aspx

  http://msdn.microsoft.com/en-us/library/k3f1t3ct(VS.80).aspx

  http://msdn.microsoft.com/en-us/library/aa446497.aspx

  当您已经掌握了这些知识那么恭喜您,您可能不需要把我的文章全部看完就能够做我们要做的事了。

  既然CF中的WebBrowser控件没有提供我们对HtmlDocument的访问,那么我们来看看EVC中的HTML Control(以下简称HC)吧。

  我一开始翻阅了大量Window Mobile SDK的文档,甚至在帮助文档中的HTML Control API Messages主题也找不到任何Message能够取得HC内部的HTML,最后在一个国外的C++开发论坛中找到了一些线索,其实在Mobile API中其实是可以访问HtmlDocument模型的,有这么一个Message可以返回HC的HTML Document对象,那就是DTM_DOCUMENTDISPATCH,有趣的是我们在SDK文档中输入DTM_DOCUMENTDISPATCH可以找到帮助页面,并且下方有HTML Control API Messages主题的链接,可是HTML Control API Messages帮助主题并没有介绍DTM_DOCUMENTDISPATCH消息,我们来看看DTM_DOCUMENTDISPATCH的描述吧: 

  The DTM_DOCUMENTDISPATCH message is sent by an application to the HTML viewer control to request a reference to its IDispatch interface.

  Syntax
DTM_DOCUMENTDISPATCH
wParam = 0;
lParam = (LPARAM)(IDispatch*) ppDisp;
ParameterswParam Not used. pDisp [out] Reference to the HTML viewer control's IDispatch interface. Return Values

  Returns the HTML viewer control's IDispatch pointer. Use it to call QueryInterface(IID_IPIEHTMLDocument, (void**)&pHTMLDocument) to retrieve the HTML viewer control's IPIEHTMLDocument interface.

相关视频

    没有数据

相关阅读 vs.netIDE报"以下文件中的行尾不一致,要将行尾标准化吗?"的解决ie6下面asp.net mvc3 部署应用程序.NET 3.5 安装错误的四个原因及解决方法支持无限制历史记录的Paint.NET 3.5.8 Final,你用了吗?.NET Framework环境安装错误怎么办?JVM和.NET CLR和哪个会被彻底击败在asp.net mvc中实现右键菜单和简单的分页教程VB.NET如何得到调用当前过程的方法名称和类名称

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题