前端技术是否能应用于较底层的桌面程序开发

背景:
本人存在比较多的桌面程序开放(功能主要有数据采集、数据计算、报告生成、excel导出)等功能,目前使用VC(MFC)、VB、CVI语言编写,界面设计非常头疼,并且比较丑。

一直有html+css+js的基础知识,想使用前端语言实现。目前了解的有nw,网易NEJ,有道hex,CEF等。因为存在硬件底层关系,准备在windows上VC平台使用,所以只有CEF可以实现。

问题:
1、CEF中JS与VC++通信的方式
2、一般直接填充html文本方式载入还是VC嵌套一个WEB server
3、除了CEF是否还有更合适的选择?

阅读 5.5k
6 个回答

说一下我的建议: 纯属个人建议,请慎重思考

  1. 既然是比较底层的桌面开发, 个人觉得还是选择专门负责桌面开发的语言工具比较好, 因为这些比较成熟. 虽然目前有一些可以把html,js,css这些内容,使用到桌面开发中. 但是,和底层打交道, 肯定就弱一些. 或很多.

  2. 至于题主,目前使用的语言工具. 做的界面比较丑, 那是肯定的. 主要是目前的软件都有所提高. 这个,后期可以找设计,设计一下就会好一些. 可能时间有些长. 同时,桌面程序的默认界面风格, 有一些是和系统有关的. 就像Win的风格和Mac的风格. 同一套代码,在不同的平台,会有所差距.

  3. 我个人比较了解的是Qt. C++ 的框架. 同时又是嵌入式的主力军. Qt的宗旨就是运行在任何的地方. 目前Qt5的版本,QGUI几乎都是支持HTML,css. 有些控件的样式,就是通过css设置的. 文字的样式html排版布局. Qt的富文本就是html代码. 至于QML,那简直就是桌面版的Web.后面语言也是js标准. 同时,还可以和C++交互. 前端设计有HTML,css,js管理,底层逻辑,有C++负责.而且很容易和系统交互. 同时还是嵌入式的. 这一条,确实很诱惑,但是请慎重考虑自己的情况.

鉴于你对于前端的基础,建议你采用Electron来构建桌面程序,通过electron,你可以快速构建自己应用程序,后台结合nodejs,前端可以自己选择,可以使用react、vue等前端框架

我推荐你直接上C#用WPF,也是一种方案

虽然我是搞前端的

nw和electron都行.
1.C组件封装成c plugin
2.C组件做成个exe,两个进程之间走管道或者tcp通讯.

nw参考:https://github.com/nwjs/nw.js...

我建议还是单独的exe走tcp,plugin需要注意的有点多.

同意 @springhack 的回答。介于你之前的经验,如果只是个人开发还是直接使用 WPF 比较符合你的习惯。

前端方案 nwjs 和 electron,其实限制越多(从传统客户端界面开发角度看)。而且这些方案都是 js 作为主开发语言,这个还是需要一些学习成本的(js没看上去那么简单);C/C++ 只能作为扩展存在,受限很大。

CEF 的方案,等于你要自己实现简易的 nwjs 或者 electron,需要学习和了解 chrome 的很多机制。关键是没人给你的项目持续优化的话,启动慢和程序包特别大是免不了的了,还可能有不少坑导致的bug。

需要很好界面效果的话,用 WPF 挺好的;如果是比较好的界面,Qt 也不错,还跨平台。

以上建议只针对个人开发。如果是团队项目,界面要求比较高或者已经有不错的js程序员的话(或者可以招一个),以上缺点可以忍受,用 electron 挺不错的。


利益相关:
C#做过一些传统客户端界面,目前是前端。

提个思路,你参考下.

用户浏览器 + 本地HTTP服务器 + C/C++实现的exe命令行工具
好处是,安装程序比较小,用不到的PHP扩展库如icu/intl可以删掉,这样下来PHP解释器打包后也就几个MB而已,加上你的C/C++工具集大小.为了强化你的应用,可以考虑加一个BusyBox for x86的shell工具集.

比如:

1.建立本地HTTP服务器
php -S 127.0.0.2:8080 -t C:\php\www
C:\php\www是网站根目录.
PHP代码可以用PHP7的opcache.file_cache导出二进制中间码opcode实现源代码保护.

2.调用用户默认浏览器访问http://127.0.0.2:8080显示交互界面.
需要用到比较复杂的DataGrid数据网格,可以考虑使用jQuery EasyUI这些框架组件.
通过调用命令的方式调用你用C/C++实现的本地功能.
PHP的popen/proc_open都可以实现非阻塞的进程间管道通信.
shell参数转义可以用escapeshellarg,命令转义可以用escapeshellcmd.
简单的接收命令的输出和返回值可以用exec,复杂的非阻塞的可以用proc_open.

其实这就有点像,我用本地程序如Delphi实现的HeidiSQL能管理MySQL,用基于本地B/S实现的phpMyAdmin也可以管理MySQL,本质都是可视化的数据库管理工具.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题