windows桌面开发,界面始终是最大的困惑。我们对前端工具的要求,其实只有窗体设计器、消息映射,过分点的话自适应屏幕、模型绑定。能够免于手工书写,其实这个问题并不复杂,但VS不实现、QT语法怪异、wtl同样,甚至第三方工具也无,wxWidgets也没有。
 
一、各种Html方案:
1、node-webkit:
    有一个叫light-table的IDE项目复杂些,但看起来性能未必很好。不过,与webstorm之类java做的ide区别,性能上似乎也并没有多大的差距。目前来看,简单的通过调整初始url,可以直接将服务端应用转为客户端,这意味着一个能够全屏、置顶的浏览器。
    需要带十几兆的包,这是比较讨厌的事情。
    最初的疑问是:node-webkit使用require之类语法,在前端调用node模块。这种开发实际上比较麻烦的,好像在哪种IDE下都不好工作...那么,很简单的思维,既然node就在本地,那么使用本地资源为何不直接用node做服务端,而前端用REST调用?这样两个好处:1、前端是纯粹的前端项目,不同的是自带浏览器。后端为纯粹的node项目。两方面来看,各种编译器都支持。2、桌面和Web应用的代码将完全一致,不同的只是前者自带浏览器。
    不过后来发现这个不是问题,node-webkit可以通过设置启动url直接的使用服务端项目。
    
    类似node-webkit的,首先是CEF3,这个有一些应用,看起来历史更早,但据说其追随新版chrome比较麻烦,在node-webkit上也有一个分支名为CEF。网易的Hex是典型的中国式项目,只发布了简要的文档和二进制包,据说要开源但目前还没有,用hex做的有道词典,性能还不错,据说是分析过node-webkit,觉得不易商用才自行处理的,但作者重新造轮子、敝帚自珍的心态很明显,几乎是不能考虑的。
 
2、htmllayout
    另一种选择,是个600k左右的dll,不开源。使用html处理布局,使用css的特性调用c++的功能,当然这不是html5,也不是完整的html解析,只是针对窗体布局的子集。
 
3、EA-Webkit:
    是对Webkit而非chrome核心的剪裁,只有4M,但显然也是很冷的...其本身的目标应该是在桌面应用中显示网页,没有调用c++、访问本地资源的能力,那么就不能说是界面方案。当然,用wtl结合它,应该能做些简单的工作。
    开源的页面在:http://gpl.ea.com/  丢一堆的代码,没有文档。
    这是极少的例子中的一个:用duilib和eawebkit制作的浏览器,当然,用起来令人崩溃:
 
 
4、htmlview
    mfc提供了基于ie核心的htmlview,这个,由于用户端机器的ie版本不同,也是颇为要命的事情,这会带来多大的工作量呢?国内颇多产品,近年将对ie的依赖转向chrome,不是没有原因的。
 
5、tc/tlk方案
    看看git的官方windows界面就知,这是很古老的东西,丑陋的不成。界面使用所谓tlk文件,并没有太好的设计器,其主要的意图是跨平台,而非简化设计。
  
二、Direct ui方案
    国内还存活的大约只有DuiLib,金山自己都不用自己的界面库,迅雷的各种复杂,其他都比较小众,而且这个话题,所谓的less window在2010年后似乎提及的也不多。
    以duilib来说,窗体设计器非常简陋,许多bug,经常崩溃。更别提模型绑定、事件绑定了。我将其在vs2013下编译通过,仔细看了下代码并与其中一个开发者讨论过,设计比较紊乱,自愿者的组织也相当松散。 
 
三、Mfc和wtl:
    确实很麻烦。使用资源文件描述窗体,和使用xml、html没什么区别。有简陋的对话框设计器和ribbon设计器,消息映射可以使用类助手来略麻烦的处理。从这个角度来说,html方案并不占优。wtl则在进入vs2012之后,wtl helper没人维护,消息映射需要手工书写。如果界面简单,或可使用wtl,"小"是优势。
 
四、QT和wxwidgets
    QT相对比较成熟,业界应用也广泛,但比较庞大,且写法怪异,需要类似mfc一般的深入了解所谓"框架"。wxwidgets实际上是类似mfc的做派,同样也比较大。两者都跨平台,事实上桌面应用,跨平台到mac、linux的需求少得可怜。
    其他小众的界面库,甚至都没有深入了解的愿望。
 
    实际上,当年Delphi的界面设计,今天在windows里,各种方案都做不到。我相信微软、谷歌这些公司肯定能做到的,但是,是否每个公司都本能的希望,win平台的原生开发需要门槛高企?

windows原生开发之界面疑云的更多相关文章

  1. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  2. 浅谈App原生开发、混合开发及HTML5开发的优劣

    App混合开发(英文名:Hybrid App),是指在开发一款App产品的时候为了提高效率.节省成本即利用了原生的开发技术还应用了HTML5开发技术,是原生和HTML5技术的混合应用.目前App的开发 ...

  3. 原生开发、H5开发、混合移动开发的优缺点

    一.原生开发(Native App开发) 原生开发,是在Android.IOS等移动平台上利用官方提供的开发语言.开发类库.开发工具进行App开发.比如Android是利用Java.Eclipse.A ...

  4. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  5. Visual Studio原生开发的20条调试技巧(下)

    我的上篇文章<Vistual Studio原生开发的10个调试技巧>引发了很多人的兴趣,所以我决定跟大家分享更多的调试技巧.接下来你又能看到一些对于原生应用程序的很有帮助的调试技巧(接着上 ...

  6. Visual Studio原生开发的10个调试技巧

    这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托 ...

  7. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

  8. Visual Studio原生开发的10个调试技巧(二)

    来源:oschina 发布时间:2013-08-10 阅读次数:397 51   我以前关于Visual Studio调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你 ...

  9. (转)Visual Studio原生开发的10个调试技巧(二)

    我以前关于Visual Studio调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来编号).这些技巧可以应用在VS200 ...

随机推荐

  1. 在ios中使用第三方类库

    在项目开发中经常会用到一些第三方类库,通常有两种方法来做到:一种方法是直接把所有的.h和.m文件复制到项目中:另一种方法是把.xcodeproj拖到项目中生成静态链接库并引用. 方法一:直接复制所有源 ...

  2. Orleans中的Timer和Reminder

    Timers and Reminder 定时器和提醒器 Orleans runtime 允许开发人员通过一种叫做timer和另一种叫做reminder的机制为grain添加周期性行为.接下来我分别为大 ...

  3. 用c#开发微信(3)基于Senparc.Weixin框架的接收普通消息处理 (源码下载)

    本文讲述使用Senparc.Weixin框架来快速处理各种接收的普通消息.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下7种类型: 1 文本 ...

  4. Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  5. 轻松实现ajax登录时让浏览器保存密码

    将登录页面由form提交改为ajax提交,发现一个副作用——登录时浏览器不会提示是否保存密码,这样每次登录都要输入用户名/密码. html代码如下: <script> $(function ...

  6. 单元测试 Mocking 类库需具备的特性

    一个优秀的单元测试 Mocking 类库,需要具备如下几个特性: 易用性:有非常明确的 API ,易于使用并易于记忆. 健壮性:行为结果始终一致,并保持准确. 帮助性:当程序出错时,给出尽可能明确的原 ...

  7. iOS——Swift开发中的单例设计模式(摘译,非原创)

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

  8. BlueDream.js(蓝梦)——jQuery网站使用引导插件

    小菜在前端世界游荡有些时间了,常见的插件多少有些了解,但却很少看到用户引导插件. 所谓用户引导插件,就是在第一次使用某个网站时,会弹出一些小动画,告诉你网站的基本使用方法,帮你快速入门. 这应该是个常 ...

  9. Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o

    Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o 1. Criteria,,Criterion ,, 1 <2. 主要的对象黑头配置磊 ...

  10. paip.最好的脚本语言node js 环境搭建连接mysql

    paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world   .js 2 #---------模 ...