多样、互动的WinForm UI设计与开发思路(Flash、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。

我们首先来看一下这种实现的技术前提:

1

macromedia提供了flash player的activex控件,可以直接嵌入到winform

2

flash本身提供了和web环境类似的表单控件(textbox,button..)

3

flash提供了和外界的数据交换功能,可以通过fscommand向外发送事件

4

flash内部可以使用actionscript(一种类似javascript的脚本)控制其内部行为

5

flash对http和xml有良好的支持

6

flash支持webservice

如果你以前不了解或熟悉flash,当你看到这么多激动人心的特性后,大脑里已经迸发出各种思想的火花了?flash不仅可以帮助我们在winform里实现各种强大的交互功能,而且可以借助于webservice,实现类似于smartclient的富客户端(smartclient既不算胖也不算瘦客户端吧)^^

我们再来看一下除了以上几点,flash真正吸引我们解决文章前面提到的问题的一些特性:

1

flash基于流传输,非常小巧并且嵌入浏览器

2

纯flash可以做到跨平台

3

flash在动画效果和用户交互上的强大表现力

4

flash动态交互效果的容易实现(相对于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了:)


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值