作为一名喜欢耍耍程序玩的人,编写一个小软件是家常便饭,但是作为一个酷爱C++的人,编写了一个感觉非常好的程序,但是界面看的自己都烦死了,就好像是正吃饭遇上了一坨便便,恶心又晦气。
我承认,自己没有美的天赋,虽然一直都尽量做到整洁和简单,但是一成不变的界面真心让人提不起追求的勇气。话虽夸张,但不可避免的是,没有好的界面,再好的程序也难免跳坑。
C++不是没有好的界面,如C skin, Direct UI , 还有金山、迅雷等厂商的界面SDK,但是那都是人家的,要么是收费,要么就是一个庞大的包袱,踏破天涯,无觅处。
我希望的界面库应该是什么样的呢?我想:1、轻量级。这个很重要,我不可能为了一个界面附加N0MB的其他数据,极不方便。2、自由度高。C skin是我挺喜欢的一个库,原因就是它非常小,使用非常方便,但是代价就是除了设计好的统一的风格,我不能对每个控件做出其他任何的修改,想要个性化地实现,必须重绘。每个C++的程序员都会对重绘深痛恶疾的,尼玛,还不如我自己贴图呢。最后,它已经停止更新了。3、使用要方便。没有人喜欢太过复杂的技术。Direct UI 在这方面就做的还可以,至少有完善的文档和例程教会我们怎样去做,但是我们虽然离开了贴图的井底,但是还是在别人的竹竿上跳舞,再加上动则N多money的付出,像我这样的自由爱好者是负担不起的。
我承认,我还没有找到我的“梦中情人”,我要说的HTMLayout也不是。但是,作为一个曾经收费的库,它的理念和实现都是一个巨大的创新,很多人说他老了,(似乎也停止更新了,不确定),但是我喜欢他。
(个人理解)从使用者角度来看,HTMLayout将程序分为2层,使用的是改进的IE引擎。在界面层,他依靠改进的IE引擎,通过HTM页面创建窗体界面,通过引擎的内部消息循环连接到主程序消息循环中,响应界面上的各种事件,主题逻辑由C++完成。引擎中的IE解释器使用的是修改过的,不可以使用javascript和dom等的动态语言,但是添加了很多其他的处理功能补充。
网站:http://www.terrainformatica.com/htmlayout/
国内做的比较好的: 快手 http://www.aau.cn/
------------------------------------官方的说明(翻译)----------------------------------------------------- HTMLayout: 快速,轻量、嵌入式的,基于HTML/CSS渲染技术和布局管理的界面引擎组件
学习HTMLayout之前,你一定想了解HTMLayout能做什么?官网上有一项统计,当前HTMLayout被安装在超过6,700,000台电脑上,使用在不同的公司不同的产品中。这也意味着每天有大约43,000个用户下载并安装以HTMLayout开发的产品。
基于HTML引擎的HTMLayout组件可以给你的应用程序带来以下的优势:
- 快速 HTML渲染仅占用非常短的线性时间
- HTML/CSS 针对界面布局的功能增强。包括:%% 长度定义 和 expandable backgrounds(九宫格背景定义) 允许你使用更灵活的以屏幕为导向的布局策略。
- 用户自定义的 behaviors API 允许你为HTML 元素定制行为,以响应不同的键盘和鼠标事件。
- 和宿主程序松散耦合,不存在任何组件级的交互。换句话说,类似于传统的窗口控件,HTMLayout仅使用WM_NOTIFY消息机制和宿主窗口对话。
- 较小的发布尺寸: HtmLayout.dll 仅有600KB大小(压缩后)
- 无依赖性 和客户电脑上安装的浏览器无任何关联。
HtmLayout 可以帮助你实现:
- 创建“Web类型”用户接口的应用程序;
- 把用户交互逻辑从你的应用程序中分离出来;
- 管理复杂布局的录入表单;
- 创建“可换肤”的用户界面——使用HTML作为你应用程序的皮肤;
- 构建帮助系统,HTML电子书,轻量级浏览器,等等;
- 开发支持多语言的用户界面;
- 创建可自由缩放的界面布局,控件随界面大小自动重新布局;
- 打印和打印预览功能。打印API允许你任意调整你的HTML输出;
- HtmLayout是基于报表应用的最佳解决方案;
HtmLayout 基于Window技术实现,以DLL动态链接库的方式提供。 HTMLayout 未使用任何复杂的组件技术,因此它的启动速度非常非常的快。快到什么程度呢?真是难以描述 .... 嗯,就让数字来说话吧:
什么是HTMLayout - 国内介绍版,呵呵
HTMLayout是一个免费的开源界面库(核心未开源),以DLL的方式运行,并提供一个API的调用接口和一系列的C++封装和sample例程。HTMLayout相当于一个轻量级浏览器引擎,可以高效的解析和渲染HTML网页。其几乎支持所有的HTML元素和CSS3标准,并根据界面库的特征,做了很多有用的功能性扩展,简要列举如下:
1.强大的CSS+扩展,支持九宫格的图片扩展和拉伸模式,增强了容器的前景和背景图片填充能力,支持PNG图片透明和动画;
2.支持多样化功能强大的布局模式,有效了解决了标准HTML中流模式布局的不足;
3.功能完善的事件传播机制和定时机制,通过behavior行为在应用中通过c++类和网页元素进行交互,制作网页效果易如反掌;
4.功能齐全的字符串处理和及c++类,并提供了功能完善的JSON字符串和类Variant的VALUE值类型,有效的解决多字符/UNICODE/UTF8/BYTE等字符串之间的转换和操作。
5.强大的图像处理API,可以在任何的HTML元素之上绘图。
6.支持自定义控件,例如Flash、Chart等第三方ActiveX元素的绘制,方便了界面库的扩展;
7.运行速度飞快,占用内存低,性能高效。
8.和DirectUI一样,控件以无窗口模式运行,所有的控件都是绘制在界面上;
HTMLayout的应用
目前,基于HTMLayout的应用在全世界已经有成千上万个。在HTMLayout的官方网站上,列举了一些比较知名的企业:http://www.terrainformatica.com/customers.whtm
•Symantec Corporation
•Hewlett-Packard Corporation
•Motorola company
•Real Networks, Inc. •Alawar Entertainment, Inc. •EverNote Corporation •Munnin •Gaijin Entertainment •ALWIL Software, home of the AVAST! •Maxthon •BitDefender •SpamFighter
国内的应用,例如傲游浏览器3.0,其界面基于HTMLayout设计。由于HTMLayout中文文档缺乏,且早些年处于商业收费状态,在国内的应用并不广泛,甚至很少有人谈论。作为这个技术的受益者,国内一牛人建立一个推广群,希望能带动这个技术的发展。群:145775715 欢迎有需求的加入!
同传统的IE浏览器对比
作为对比,IE浏览器也可以通过ActiveX嵌入到对话框中的方式进行基于Web的开发,但IE浏览器作为一个界面引擎有以下不足:
1.IE浏览器对HTML标准和CSS支持不足,不同版本的支持经常有很大差异。导致在不同的客户端上部署经常出现问题;
2.IE基于COM模型集成,应用程序的代码与IE之间通讯困难,往往需要大量的COM接口类进行辅助,而且字符串形式单一,很多交互通过JS代码方式进行,性能低下;
3.图片透明和扩展不灵活,不能支持复杂的背景和前景图片;
4.流模式的布局在支持复杂的网页布局方面力不从心。
5.加载速度慢,内存占用高。
同传统的贴图方式比较
传统的贴图界面具有较强的用户群体,主要是通过把界面分隔成小块的图片,在界面更新时绘制到界面的对应位置。这种方式完全模拟了Windows界面处理的逻辑,在性能上具有较大优势。但缺点依然很显著:
1.界面的切割相当麻烦,用户需要精确的知道切割的坐标和大小,稍有不慎便面目全非;
2.仅支持界面的换肤,功能单一,对界面元素和系统之间的交互性没有任何支持;
3.缺乏一个统一的标准来统一,各种API的使用方式大相径庭,各显神通
同DirectUI的对比
受到MSN Messager界面技术的影响,DirectUI近几年有渐热的趋势,很多技术人员开始研究DirectUI的原理。DirectUI的原理其实很简单,也是通过图片绘制的方式把界面和控件绘制在一个平面空间上,摆脱了传统windows中父子控件层层嵌套的事件传播机制,并提供基于脚本的界面交互机制,在性能方面具有较大优势。缺点如下:
1.目前缺乏统一的技术规范和文档支持,很多商业库实行技术封锁,卖价高昂,让普通开发者望尘莫及;
2.开源库功能简单,缺乏有效的文档和界面设计器支持,开发效率低下;
3.缺乏如HTML中DOM元素一样的灵活的层次关系,系统和界面交互较为复杂;
4.具有较高的学习曲线。