多样、互动的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了:)

转载于:https://www.cnblogs.com/zeroone/archive/2010/02/11/1667383.html

多样、互动的WinForm UI设计与开发思路 转载相关推荐

  1. WinForm UI设计与开发思路(转)

    最近一年来一直在做WinForm相关的系统,对WinForm的UI设计有一些想法想和大家讨论(主要是比较忙,所以很多只是设想,还没有开发实例) 关于WinUI,理想的情形应该是外观比较cool,能给用 ...

  2. 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例-转...

    一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了 ...

  3. 众筹开班你说了算!UI设计+前端开发一站式打包学

    UI设计入门有几步?前端开发是开发些啥?实际工作中UI设计和前端开发是如何衔接在一起工作的?Word天,这期课程厉害了,听完干货都能直接上手参加工作了,快告诉我怎么听课! 这一回小码哥不走寻常路,干货 ...

  4. 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8980917 本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个 ...

  5. 从UI设计到开发,Lottie使用全流程

    从UI设计到开发,Lottie使用全流程 使用lottie Lottie 是一个 iOS.Android 和 React Native 库,可以实时渲染 After Effects 动画,让应用程序可 ...

  6. android ui设计与开发工具,Android用户体验与UI设计

    Android用户体验与UI设计 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 本书是一部介绍Android用户体验.UI设计理念和方法论的作品 ...

  7. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8987342  这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部 ...

  8. 【Android UI设计与开发】第01期:引导界面(一)ViewPager介绍和使用详解

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8980917 做Android开发加起来差不多也有一年多的时间了,总是想写点自 ...

  9. UI设计/GUI开发-入门界面设计

    概述 从几个概念谈起,GUI(图形用户界面).UI开发.前端.Web开发,这些个耳熟的词语,是否想过它们正真的含义!一款使用体验极好的软件,好看.好用,必然不是凭空想出来的,而是有理论依据.多方配合设 ...

最新文章

  1. 百度Tera数据库介绍——类似cassandra,levelDB
  2. Windows核心编程 第十二章 纤程
  3. 云炬Android开发笔记 5-7网络框架优化与完善
  4. Java技巧分享:判断字符串是否为空常的三种方法
  5. 假如生活欺骗了你!——Leo网上答疑(14)
  6. ASP.NET是如何在IIS下工作的
  7. vue pc移动两个html,vue一套代码适应移动端,pc端
  8. [数据结构] Link Cut Tree
  9. idea加载jsp项目无法打开web页面
  10. canon l11121e驱动_佳能打印机l11121e驱动下载
  11. 饥荒联机版Mod开发——制作栏(九)
  12. SQL语句练习-入门篇
  13. [硬件基础]开关电源和线性稳压器的优缺点?
  14. css进阶四(多媒体嵌入)
  15. 厉害了!互联网公司各岗位真实工作内容大起底!
  16. Java 基础学习之字符串的简单操作和适配器设计模式
  17. 【Babylon小技巧04】进阶双开门事件绑定同时触发
  18. Google(谷歌)拼音输入法发布
  19. Silverlight杂记Media和SMF播放控件推荐
  20. 「新拟物化」过时了!此刻你最应该拥抱的是「玻璃拟物化」

热门文章

  1. kali下Burpsuite对网站后台注入php木马
  2. 定位:提高生产力的开端
  3. docker 监控报警以及日志分析
  4. lis25ba_LIS25BA骨震动传感器的驱动问题
  5. direct wifi 芯片_Android WifiDirect 学习(三) 一些基础知识和问题
  6. C罗老矣,我的程序人生还有多远
  7. 【Python】使用python实现汉字转拼音(2018.12更新)
  8. 【OpenGL ES】片段操作
  9. android 五线谱绘制,一种五线谱绘制器的制作方法
  10. html offsetwidth 字符串宽度,scrollWidth、clientWidth、offsetWidth、width的区别