多样、互动的WinForm UI设计与开发思路(Flash、Html等)

来源:互联网 发布:三国乱世免费挂机软件 编辑:程序博客网 时间:2024/05/17 08:43

http://hi.baidu.com/zhaochunyu0104/blog/item/7122a451be47038b8d543012.html

 

http://www.cnblogs.com/kriss/archive/2005/03/04/112555.html

最近一年来一直在做WinForm相关的系统,对WinForm的UI设计有一些想法想和大家讨论(主要是比较忙,所以很多只是设想,还没有开发实例)
  关于WinUI,理想的情形应该是外观比较cool,能给用户良好的使用体验和印象,同时又兼顾功能强大和容易开发。但基于传统的.NET WindowsForms,恐怕除了容易开发,在其他方面的指标都很普通了。如果为了界面和功能,则复杂度会提高很多,用大量的GDI+和API操作,相信会让很多人头痛不已。
  以下是一些思路:
Custom Control写代码定制控件Shell Style利用Shell Style工具Flash Control利用Flash控件Html Control利用Html控件

  编程来实现各种样式的控件,这个是大家比较熟悉和常用的方法,也是上面提到过的。我们现在集中来讲解一下后面三种。

Windows Shell Style

  不知道大家在厌倦了Windows默认的窗体和菜单后,是不是用过一些改变Windows外观的软件,例如StarDock公司的很多产品(WindowBlinds总知道吧)以及TGTSoft的StyleXP。

轻松改变Windows程序的外观

  事实上微软在Win2000,XP,2003系统上均引入了Visual Style的概念,也就是系统外观主题。它提供了一些API,可以方便地修改Windows窗体和控件的整体外观呈现。所以我们一般在改变Windows的主题后,一般大部分程序的按钮、形状都会跟着改变(在.NET中可能需要将控件的FlatStyle设成System并且EnableVisualStyles()才会有效)

  这里要提的是TGTSoft的StyleXP工具,它基于Windows Visual Style架构,同时又有自己的API,此外,它还有其他一些优点,比如它的每种外观样式,全部打包在一个DLL文件中,同时还有相应的工具(StyleBuilder)来制作这些样式DLL。
  在安装完StyleXP后,我们可以在"C:/WINDOWS/Resources/Themes/主题名称/shell"目录中找到该主题的DLL文件。

StyleBuilder让你定制自己的Windows外观

  有了这些基础,我们就可以在我们的程序中利用ShellStyle的API来应用这些外观样式,通过加载不同的资源DLL,就可以轻松改变软件的外观。当然这种方式中,你所使用的控件还是传统的Windows控件,所以还是有一定局限性。
  至于如何利用ShellStyle的API,CodeProject上有一个不错的例子:Themed Windows XP style Explorer Bar

Flash Control

  我们知道Flash的出现和广泛流行都是由于Web环境,但Flash发展到今天,其功能已不单单局限于Web。我这里提出的一种思路就是把Flash作为控件应用在WinForm中。微软研究院的Wallop就是完全用的Flash。
  我们首先来看一下这种实现的技术前提:
1Macromedia提供了Flash Player的ActiveX控件,可以直接嵌入到WinForm2Flash本身提供了和Web环境类似的表单控件(TextBox,Button..)3Flash提供了和外界的数据交换功能,可以通过FSCommand向外发送事件4Flash内部可以使用ActionScript(一种类似JavaScript的脚本)控制其内部行为5Flash对Http和Xml有良好的支持6Flash支持WebService
  如果你以前不了解或熟悉Flash,当你看到这么多激动人心的特性后,大脑里已经迸发出各种思想的火花了?Flash不仅可以帮助我们在WinForm里实现各种强大的交互功能,而且可以借助于WebService,实现类似于SmartClient的富客户端(SmartClient既不算胖也不算瘦客户端吧)^^
  我们再来看一下除了以上几点,Flash真正吸引我们解决文章前面提到的问题的一些特性:
1Flash基于流传输,非常小巧并且嵌入浏览器2纯Flash可以做到跨平台3Flash在动画效果和用户交互上的强大表现力4Flash动态交互效果的容易实现(相对于WinForm编程来说)
FLASH外观

HTML Control

  既然可以在应用程序中使用Flash,那么在其中使用HTML页面呢?当然可以,事实上这并不是一种新做法,比如微软,就在相当长时间里都在它的软件里广泛使用这种技术,例如MSN。在应用程序中嵌套HTML,好处自然就是可以把Application做得像Web一样,一个网页的外观可以做到哪种程度,你的控件,窗体也可以做到哪种程度。我们在一个网页上用HTML代码、Table表格、Form表单,各种图片以及CSS搞出来的漂亮界面,在WinForm中靠代码达到相同效果可是很大的工程。而对这些界面的调整,在html里也许很方便的改一下图片和css,在WinForm中可能相当于重写控件。以上这些都是促使我们使用Flash Control或者Html Control的重要原因:开发、修改其内容和外观样式都很方便。

  在WinForm中嵌套HTML,就目前来说我们只能用COM组件WebBrowser,在.NET里用起来不是很方便。
  关键问题在于,我们这里讨论的WebBrowser和HTML Control是作为软件系统的控件或其一部分,而并不是单纯的浏览器作用。也就是说,我们首先在乎的是其界面,然后是其交互性,也就是这些HTML Control的容器要能够访问和控制这些HTML的内容和行为。
  在WinForm里取得Html里的控件属性是比较容易的,但你有没有想过嵌套在你的WinForm里的HTML,仍能够访问WinForm里的对象呢?看看LostINet的这篇文章:
  结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。

  由于WebBrowser通过Navigate()方法来访问某个指定的HTML页面,所以这个页面的位置无非以下几种情况:
  1, 远程Web服务器,例如 http://www.tempuri.org/somepage.htm 或者 http://www.tempuri.org/somepage.aspx
  2. 本地Web服务器,例如 http://localhost/somepage.htm 或者 http://localhost/somepage.aspx
  3. 本地文件系统,例如 D:/mysoft/welcome.htm (只能是静态页面了)

  这样的一个问题就是,当你发布你的软件时,这些HTML需要一起发布,而且是完全暴露在用户面前。有没有办法把HTML一起打包呢?

 



  WebBrowser需要浏览一个url,这没错,但这个Web服务器能不能在我们的软件启动时,被虚拟创建出来呢?其实我们可以使用
  System.Web.Hosting.ApplicationHost.CreateApplicationHost()方法创建我们自己的Web宿主环境。
  它其实是把一个本地目录作为根虚拟目录,然后在内存里开辟一个新的ApplicationDomain来充当Web宿主。在这个AppDomain里我们又可以通过 HttpRuntime.ProcessRequest(new SimpleWorkerRequest(page, query, writer)) 来处理某个请求。而这个Web宿主环境还既可以运行静态HTML,也可以运行ASP.NET:) 也就是说我们可以用ASP.NET来开发我们的WinForm控件,而我们的软件内嵌了一个小型的ASP.NET服务器。
在这里我们可以把所有的页面都作为资源嵌入到你的软件里,然后在运行的时候自动把它们都释放到一个临时目录,然后让WebBrowser直接访问这个目录,或者启动你的Web宿主,访问它提供的虚拟路径。

  有没有更好的办法呢?我想就是自己写一个复杂的Web宿主,能够直接从资源文件中读取HTML,而不是通过虚拟目录。这样的话我们就可以把所有用到的页面,甚至整个网站打包到一个DLL了:)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 契税交了贷款办不下来怎么办 天津公租房住满5年后怎么办 大江里钓鱼水流太急立不住漂怎么办 房子定金交了不想要了怎么办 房子付了首付不想要了怎么办 三国大时代4王越死了任务怎么办 红米2卡顿反应慢怎么办 国税和地税合并新进的公务员怎么办 买车合格证不给我们要怎么办 初级会计报名信息表填写错误怎么办 跨国快递需要收件人自行清关怎么办 腋下有异味怎么办邀约成都真愛 腋下有异味怎么办犀利成都真愛 腋下有异味怎么办有信成都真愛 成都车牌网上选号次数用完了怎么办 在志愿服务中遇到突发状况怎么办 商铺没有房产证不能办理消防怎么办 亳州办事大厅登录密码忘记了怎么办 户口已迁出结婚证丢了怎么办 户口已迁出多年结婚证丢了怎么办 芜湖长信正式工没转正怎么办辞职 买到9个月库存车怎么办 买到5个月库存车怎么办 把4s店新车撞了怎么办 网址导航已取消打不开网页是怎么办 如果邦华手机充电口有杂物怎么办? 当发生灾害或突发事故时怎么办 物流信息和和收货地址不一样怎么办 小孩手被电梯门夹了怎么办 车管所50选一没看中的号码怎么办 长沙芙蓉区电动车被交警扣了怎么办 驾照正在考的时候住址变了怎么办 身份证到期了驾驶证上的号码怎么办 小车占道跟大车刮交警怎么办 邻居把消防栓的位置占用了怎么办 查环保要停业整改一个月怎么办 抽油烟机管道公共排烟道漏烟怎么办 深圳龙华电动车被交警扣了怎么办 英国平邮寄到中国丢件怎么办 安卓app与设备不兼容怎么办 手机卡坏了收不到快递短信怎么办