nanuiforwinform发布让winform界面设计拥有无限可能.docxVIP

  • 5
  • 0
  • 约2.93千字
  • 约 6页
  • 2021-03-16 发布于山东
  • 举报

nanuiforwinform发布让winform界面设计拥有无限可能.docx

NanUI for Winform 发布,让 Winform 界面设计拥有无限可 能 2016-05-24 个评论 收藏 我要投稿如今, 尽管 WPF 、UWP 大行其道,大有把 Winform 打残干废的趋势。但是还是有那么一波顽固不化的老家伙们固守着 Winform 好吧,既然都说 Winform 做得软件不如 WPF 界面美观效果 绚丽,那么我们就找一个方法让 DevExpress 和 ComponentOne  Winform 也拥有漂亮的界面。 都是不错的选择, Telerik 虽说是做  Asp.net  组件出生的,但是他家的  UI for Winform 做得也很不错。 稍等,那问题来了, 这些组件收费昂贵不说, 而且是年付,起价都得几百美刀。对于我这种卢瑟程序员来 说,是支付不起这样高昂的费用的。那有人要说了,你咋不 用破解版的呢?是的,可以用,而且也在用,但是这样一来 我的内心是无比纠结的,用破解的盗版的,我就得欠另外那 群程序员一大个人情, 我这人虽然卢瑟, 不喜欢欠别人人情! 开个玩笑而已: )那么,有没有什么开源的,免费的,好用 的解决方案呢? 研究了一段时间,本人发现用浏览器做壳用 HTML 和 CSS 呈现软件界面是一种新趋势,当然这里指的浏览器不是 .net 自己带的 WebBroswer 控件,原因不用我多说, 大家都明白。 这里说的是大名鼎鼎的 CEF —— Chromium Embedded Framework  ,通俗点也就是谷歌浏览器的核心了。  CEF  作为 一个开源的浏览器核心组件对  HTML5  、CSS3  和  JS  标准的 支持不用我过多介绍,都是极好的。目前很多大厂都在使用 CEF 作为软件界面呈现,比如鹅厂大名鼎鼎的微信桌面版, 网易的云音乐等等。所以,如果将 CEF 引入 Winform 作为 界面呈现也是可行的。 CEF 的 .net 实现众多,最后相中了 CefSharp 和 ChromimunFX 两个开源项目,对比之, CefSharp 除了传统的浏览器功能外还实现了离屏渲染, 但是作为 Winform 忠狗的我来说,我并不需要离屏渲染这项高端技术。最终 ChromiumFX 使用 PInvoke 的方式调用 CEF 的 API ,更接 近“原生”,也更利于定制。经过个把月的披星戴月,在 ChromiumFX 的基础上本人完成了自己的 CEF 界面封装, 暂时命名为 ___NanUI for Winform ,目前处于预览阶段。 那么,下面就来看看本人封装的 NanUI 完成了什么工作。 上 图先 ~~ NanUI for Winform NanUI 目前处于预览开发阶段,还有一些问题并未解决,因 此暂时不传 GitHub ,等稳定一些会考虑开放源代码。 目前实现的功能: 无标题窗口 支持 css 标记 -webkit-app-region:drag|nodrag 支持网页资源打包内嵌 支持编译 Any Cpu 类型的项目 其他 ChromiumFX 该有的功能  标记 那么,下面分项介绍上面列举的功能。 无标题窗口 你以为这里的无标题窗口就是单纯的把 FormBorderStyle 置为 None 吗?当然不是。实现基础是调用 DWM 的  设 DwmExtendFrameIntoClientArea ,然后重绘了下窗口的边 框,处理了各种鼠标事件。那有人要问了,那作着些事情不 是狗解手吗,直接 FormBorderStyle 设置个 None 不就解决 了?是的, 这是可以解决, 但是窗口就丧失了各种投影效果, 各种放大缩小的效果。 其次,还有各种鼠标消息和 HITTEST 消息,需要从 ChromiumFX 中传递到窗体上,要不然 ChromiumFX 一旦 Dock 然后 Fill 到窗口上,窗口还会相应 鼠标事件才怪。所以,作为 UI 的基础,拖拽、放大、缩小 等基本的操作都实现了。 支持 css 标记 -webkit-app-region:drag|nodrag 标记 在网页元素的 css 里打上“-webkit-app- region:drag ”标记就,可以实现拖动该元素来移动窗体。 如图所示,需要拖动的地方,就是 drag ,在标记过 drag 的 元素上某些不给拖动的位置(例如关闭,最大化,最小化按 钮位置)打上 no-drag 就拖动不了了。 其他没标记的地方随意,拖动事件会直接交给 JS 。 支持网页资源打包内嵌 NanUI 支持将做好的网页 html 、css 、js 、图片等文件直接作 为嵌入资源编译到当前项目或者独立的 DLL 中,框架会自动 调用嵌入的网页资源。既然用

文档评论(0)

1亿VIP精品文档

相关文档