目前比较热的GUI 总结

   这两天论坛上最火的帖子就是关于两个GUI:金山卫士KUI界面库Google chrome界面库。再加上一位仁兄对金山卫士GUI消息机制和路由的解读。这是我们每天都在用的东东,下载了,研究了一些不错,好多东西值得我们去学习。为此想到总结一些C++的常用程序框架。

    在这个帖子上我们可以看到常见的程序框架http://home.pacbell.net/atai/guitool/,见到了Free和商业两大类,几十种。

    整理了一下常见库的评价:http://blog.csdn.net/zhaojinhai/archive/2007/12/25/1966422.aspx

 

        MFC:运行效率很高,功能很全,思想比较旧,面向对象特征不明显,开发效率较低,不跨平台。
        WTL:运行效率很高,功能较全,比较先进,但是文档很少,没有官方支持,不跨平台。
        wxWidget:运行效率很高(Windows下,也是原生窗口,和MFC一样,linux下要差些),功能很全,风格接近MFC。现方式类似                                 MFC,通过宏来实现消息映射。
        QT:自绘窗口,跨平台时窗口风格能够固定,运行效率较低,但开发效率较高,可跨平台。

         Fox-toolkit,小 日 本的作品,消息映射机制感觉比较糟糕

 

帖子MFC和DirectUI的优势48、52、59楼,里面提到两个界面库免费开源的http://code.google.com/p/duilib/  http://code.google.com/p/directui/

 

 

 

 

 

附录1:windowless的致命缺点

小弟最近研究界面实现技术,过年也没闲着,google了整个网络。弄界面也弄了几年了,做比较炫的界面,也没什么问题。最近公司年后要启动一个项目,项目非常复杂(一套卖几百万),要使用文档/视图结构,但一定要做深层次美化。以前一直用mfc做界面,使用gdi或gdi+贴图,用ini或xml配置界面。常用控件的美化也实现了好几年了,都比较稳定,个别特殊控件,实现一下也没什么问题,由于这个项目周期很长(两年多),正好借新项目,好好总结一下目前比较常见的界面开发技术。今天先总结一下windowless的致命缺点,过两天总结它的优点,和其它技术的优缺点。再提一句,我们的项目是使用wpf开发,也是windowless,但与我下面所说的windowless是两回事。

windowless或者称handleless,也就是无句柄窗口,在设计和实现的时候,每个控件都自己实现,最后画到父窗口中。另一个伪windowless是用标准mfc控件,然后通过hook或其它远程线程注入等技术,让spy++等软件,看不到窗口句柄。这主要是为了防止盗号木马通过edit窗口句柄,盗取用户名和密码。好了,费话少说,下面是小弟总结的windowless的缺点,如果要使用这类界面开发技术,要么有源代码,要么是自己公司实现的,否则风险非常大。

1、无窗口句柄,所有您以前关于“窗口”概念的知识都白学了。您将不可能使用::ShowWindow(hWnd, SW_HIDE)来隐藏一个窗口,也不能使用::MoveWindow来移动一个窗口。
2、所有您以前学习的关于“消息”的知识也作废了。您不可能使用::SendMessage(m_hWnd, WM_SETTEXT, 0, (LPARAM)_T("Hello world"));来设置窗口标题。
3、如果您的程序已经写好,需要花费比开发程序还要长的时间来移值到DirectUI界面上。
4、重新学习一套系统接口和概念,如果不是国际知名的大公司的windowless产品、这些知识对您的职业生涯没有太多好处,反而浪费了您的时间。
5、如果不是国际知名公司的产品,产品的稳定性和可发展性无法保证。
6、如果您的功能层代码需要与UI层交互,例如,要向UI窗口发送消息,那么您的功能层代码也要做相应的修改,所以windowless类的界面库,不仅仅影响UI层,还影响功能层。
7、窗口的剪裁、激活、绘制、消息循环等等全部需要模拟。
8、除了极个别程序,全球几乎所有软件产品都使用win32布局方式,无论在技术储备,兼容性和获得帮助方面,标准窗口观念都有得天独厚的优势。
9、无法对编译好的exe进行后期汉化、编写插件等常规操作。运行中的程序也无法响应其它程序发来的标准消息,例如隐藏控件、设置控件文本等。
10、不支持MFC的文档/视图框架。
综上、windowless比传统win32窗口树形结构有很多局限性和不确定性。

 

附录2http://topic.csdn.net/u/20110212/10/3f204ff4-63fd-4865-8522-283a12b385de_2.html 157楼http://hi.csdn.net/jameshooowindowless的理解:

还是回到windowless吧。近几年很多人关注DirectUI/Windowless,却不知DirectUI为何物。我曾经在某个帖子里面做过比喻:DirectUI = Window + Windowless,所有在屏幕上显示的东西都是DirectUI方式,3D是,浏览器是,连普通窗口也是,大家都在显存的同一块区域显示所有内容,哪里分什么有窗口无窗口。为什么要把窗口分成有句柄和无句柄呢?因为微软的有句柄窗口是工业标准,操作方式有章可循,窗口API大家耳熟能详,家家户户都用没有锁的门窗,所有人都知道该怎么操作窗口,偷鸡摸狗的人当然也知道,所以第一个问题就是标准带来了更高的安全风险,于是乎很多人开始希望在自家门窗上加一把锁,而且只有自己有钥匙。最早加锁的人还是微软自己,MSN要保护用户隐私,搞了个DirectUIHWND,被人发现后,DirectUI这个名称就逐渐扩散开来,也有越来越多的软件给自己的窗口加了锁。从这个时候起,DirectUI = Windowless,就是为了跟不安全的有句柄窗口区别开来。DirectUI 的另一层含义就是隐秘、非标准,这个概念会在用户心里生根,一旦有哪家的所谓 DirectUI 窗口因为流行而不幸成为另一个标准,它绝对会被人们踢出 DirectUI 阵营,结局跟有句柄窗口没什么两样,就因为太标准而失去了隐秘的特性。也正是因为隐秘、非标准的特性,多少人削尖脑袋想找到 DirectUI 框架、类库、标准,结果是找不到的,因为没有标准。反过来说,只要不是标准的,都可以叫做 DirectUI,人人都可以自夸我的窗口是 DirectUI,其实不用夸,本来就是,夸多了会误导更多人。

当然,Windowless 不仅仅是为了安全,在能力上自然也有自己的过人之处,我只举个最小的例子:如果想让一个窗口的某个子控件藏在背景贴图的后面,普通窗口是办不到的,对Windowless来说轻而易举。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值