转载自:http://blog.csdn.net/xiaoaiai/article/details/46043077

如果要说明这个题目上的问题,就先要说一下,软件开发的种种方式,从最初的命令行软件开发方式,到可视化的窗口软件,开发方式的进步使得开发难度降低,用户体验也越来越完善,不过今天要谈的是windows下的桌面软件开发方式,关于windows下桌面软件的开发方式,请看下面:

1. 传统的开发方式。基于WIN32、MFC

这种开放方式最传统,也最简便,从工具箱拖动控件,生成一个变量,打开MSDN找到关于这种的类的定义,便可以对它进行操作。如果技术熟练,开发出一个可以使用的工具,几乎没有难度。但缺点就是界面程序过于简陋,几乎设计师无法参与你的开发工作,只能帮你把图标切出来,可是甭管你的设计师如何帮你设计图标,你做出的软件看上去还是显得如此寒碜

2.重写MFC控件

这是一种开发方式上的进步,通过现有的系统组件,重写它的样式,然后把它的实现也重写了,就能完成你想要的功能。

关于如何实现MFC重绘,可以去参看以下这个代码试试:

http://www.codeproject.com/Articles/2840/CProgressCtrlST/

这下,设计师终于可以帮你设计整个界面,并且你也可以按照设计师的设计图完整的实现你的程序。不过你的设计师如果是个很有创造能力的人,设计出一些奇里古怪的界面,你还是会被他的DEMO打败。你会发现一些奇怪的操作方式,通过重写MFC根本无法实现。更操蛋的是,一个程序里可能出现相同的类型,却操作完全不同的多个控件,比如BOTTON,可能你要重写好多个类型,并且每个类实现的功能都不一样。

这样你只能使用下一种方式。

3.无窗体绘图。

这下你终于牛逼了,纵然产品经理是个多么装逼的货,设计师多么有个性,对你来说,他们的需求你都可以实现。虽然这种技术相对上两种来说难度够大,你要敲入的代码也很多,不过只要你会创建一个窗口,然后知道各种消息的原理,尤其要明白WM_PAINT,还有鼠标操作的消息,比如WM_MOUSEHOVE,WM_MOUSEMOVE等,然后用GDI不停的绘图,就可以实现各种操作了。

比如像QQ,360,MSN等这些看上去很漂亮的界面,都是用这个方式写成的

关于无窗体绘图技术,看看这个项目

http://www.viksoe.dk/code/windowless1.htm

你、产品经理、设计师都很满意。

不过现实是很残酷的,当你开始搞以后,你会发现,相对你旁边写PHP的那帮货们,你的工作要忙非常的多,因为他们把PHP程序写完,基本就完工了,即使页面出了问题,各种效果没有了,只需要扯大嗓门喊过前端开发看他耍牛逼就可以了。可对于你,即使界面上一个像素的改动,都需要你去改,如果你要实现LISTBOX这个很操蛋的功能,你会发现,不经过长时间的调试,极端的可能是,你的列表记录都没有办法完成的输出。或者设计突然改变,或者产品需求突然改变。。。。。。都是你的噩梦,因为你的工作,没有人帮你分担,当你筋疲力尽像打个盹时,你的领导就会走到你面前:

当然,还有一种开发模式,相信你是最想要的

4.HTML+CSS+JS

你只要写好功能的实现,如何现实界面甚至逻辑都和你没有关系了,比如要实现读取一个本地文件并返回内容,你只要createfile就可以了,然后具体返回的内容怎么用,和你就没有关系了,剩下的,就交给前段前端工程师搞就可以了。这个就是我要介绍的重点。

基于HMTL,CSS,JAVASRIPT桌面软件开发方式

用HTML,CSS,JS去构建一个桌面程序,其实这种技术并不新鲜,打开你的VS,便可以创建基于MFC的DHTML窗口。其实就是内嵌IE浏览器,再调用IE的接口去和JS实现交互

这种技术的好处在于前端开发人员(HTML,JS)和后端开发人员(c++),可以互不依赖的工作。

关于这种方式。。。

1.MFC,DHMTL开发

给大家演示一下,用MFC搞一个HTML应用程序。

关于如何用MFC搞DHTML,可以参见上一篇文章

贴代码

1.添加这个消息映射

[cpp]  view plain copy
  1. BEGIN_DISPATCH_MAP(CMFCApplication9Dlg, CDHtmlDialog)
  2. DISP_FUNCTION(CMFCApplication9Dlg, "DianDian", DianDian, VT_EMPTY, VTS_NONE)
  3. END_DISPATCH_MAP()

2.添加方法一个安全方法,否则会弹出安全提示

[cpp]  view plain copy
  1. BOOL CMFCApplication9Dlg::CanAccessExternal()
  2. {
  3. return TRUE;
  4. }

注意,它是个需方法,声明时候要注意

[cpp]  view plain copy
  1. virtual BOOL CanAccessExternal();

3.添加刚才映射的DiandianJS 方法

[cpp]  view plain copy
  1. void CMFCApplication9Dlg::DianDian()
  2. {
  3. }

以为这就完事了吗?如果这么简单就完事,还需要我出来装逼?

4.最后了,再加两句就完事了

[cpp]  view plain copy
  1. BOOL CMFCApplication9Dlg::OnInitDialog()
  2. {
  3. CDHtmlDialog::OnInitDialog();
  4. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  5. //  执行此操作
  6. SetIcon(m_hIcon, TRUE);         // 设置大图标
  7. SetIcon(m_hIcon, FALSE);        // 设置小图标
  8. EnableAutomation();
  9. SetExternalDispatch(GetIDispatch(TRUE));
  10. // TODO: 在此添加额外的初始化代码
  11. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  12. }

5.在HTML代码中调用

[html]  view plain copy
  1. <input type="button" onclick="external.DianDian()" value="点我一下,感觉自己萌哒哒" />

6.F5运行,结果看图

咋样?简单吧?不过,MFC,DHTML只能用IE,是本机IE,也就是说如果你的客户机器装的是IE6.......,IE啊.......

2.CEF

这个可是牛逼,其实就是chrome的整体封装,chrome知道吧,webkit内核,全宇宙最快V8引擎。完善的HTML5支持。

从http://www.magpcss.net/cef_downloads/上下载,记得要下载CEF3,CEF1停止更新了。里面有例子,看看就明白。

Webgl测试

Canvas 测试

够屌吧?

开发浏览器绝对没有问

但是看看它的文件结构,以及体积,也够屌的。也就是说,如果要用它开发应用程序,甭管你的程序有多大,这60M的依赖库你是躲不过的,就算不用3D等功能,最小也在40M 以上。

3.太大?换小的,EAWEBKIT

为了做游戏,EA公司使用WEBKIT搞了自己的一套WEBKIT,不说别的,小,真是小呀,编译完才4M,用它开发桌面应用程序没问题

可以去http://gpl.ea.com/下载,虽然开源,不过一点说明都没有,具体要怎么使用只能自己琢磨了

不过有个哥们挺能耐的,愣是用着东西搞出来个浏览器

http://blog.csdn.net/achellies/article/details/6550050

测试一下:访问百度首页

访问JQUERYUI

没样了。

能把30M的WEBKIT缩到4M,当然要干掉很多东西,人家是有针对性的开发,只是为了他的游戏,谁管你的JQUERY.

4.LTFrame

这个是个不大,也不小,尺寸刚刚好的html渲染引擎,基于WEBKIT开发而成,针对于桌面应用程序做了很多的优化。

用它开发出的程序。。。。

LTFRAME是基于原生WEBKIT开发而成的,它最大的改进是对WEBKIT做了较大幅度的修改,使的webkit体积大大的缩小、包括它的依赖库也全部封装在一起,整个LTFRAME只有一个DLL,大约12M,和一个ICU的字符库,大约4M.却实现了WEBKIT的几乎所有功能。

并且LTFRAME对WEBKIT内核所存在的一些BUG和不合理处进行了修正,让它更加适于桌面软件开发。

开发时候,只需简单几句话,就可以创建出一个HTML应用程序,在用几句话就能用C++轻易扩展出一个Javascript方法供前端调用。

不扯淡,直接说正题,LTFRAME官方网站为

http://www.ltplayer.com

进入以后,进入DOWNLOAD,可以下载LTFRAME

用百度下载比较快

再往下是基于LTFRAME开发而成的音乐播放器,可以下载后体验一下LTFRAM的桌面开发方式

下载后,直接解压缩,是一堆实例和实例源码

你可以用VS2008或者更高版本的VS打开、调试这些实例,要是想直接看,就打开那个relelase文件夹,里面是编译好的

关于使用方式,官方有详细的开发说明和函数的说明,打开DOCS就是

打开release文件夹,点击LTFrameExmaple.exe,这是个索引文件,包一所有的实例

贴两个运行实例

用HTML5开发的游戏

离屏渲染

更多的东西,你自己去看吧。我要去准备了,因为下次将用LTFRAME去开发一个实例

用HTML开发Windows桌面应用程序相关推荐

  1. Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建

    前言 最近想开发一套Netty网关日志分析程序,用来分析设备的原始数据.因为网关是放在linux服务器上,之前查看日志是通过Xftp工具将日志下载到本地,然后找到对应的日志数据进行分析. 对于运维人员 ...

  2. python开发windows桌面程序,python开发windows桌面应用

    为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是因为wxWidgets好用,而不是为了可以移植. 2)Py ...

  3. 如何创建一个 Windows 桌面应用程序?

    工具:Visual Studio 2017 Community 在大学期间,不过学习 C/C++ 还是 Java,每次写的程序都是控制台黑框框,有时候想设计一个可视化的应用程序却不知从何下手,大学里面 ...

  4. 使用Python开发windows桌面程序

    使用Python开发windows桌面程序 一.开发前期准备 1. boa-constructor-0.6.1.bin.setup.exe #一个wxWidges的集成开发环境,简单如Delphi,可 ...

  5. html+js开发windows桌面程序的方案(miniblink)

    最近需要开发windows桌面程序,但由于界面复杂多变且项目周期较短,故放弃完全使用qt或mfc来开发,首先考虑了Electron,但发现其打包的程序实在太大超过了100M,偶然间发现某vpn软件使用 ...

  6. Flutter教程之Windows桌面应用程序开发

    Flutter教程之Windows桌面应用程序开发 一.前言 二.环境安装 三.创建项目 四.已有项目添加其他平台支持 一.前言 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过 ...

  7. .net linux 界面设计,.NET Core3.0开发Liunx桌面应用程序

    .NET Core3.0开发Liunx桌面应用程序主要是依靠GTK. 什么是GTK? GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发.跨平台的图形工具包.最初是为GIMP写的,已 ...

  8. php开发桌面应用程序_使用PHP开发跨平台桌面应用程序的3种方法

    php开发桌面应用程序 PHP as a cross-platform desktop app development language? Blasphemy! Nonetheless, it's p ...

  9. C#基于.Net框架的学生信息管理系统(Windows桌面应用程序)

    简介 自己用C#编写了一个学生信息管理系统的Windows桌面应用程序,第一次实践,某些地方可能还不够完善,但其中有些函数.方法等的使用可以参考. 工具 我用的集成开发环境是Visual Studio ...

最新文章

  1. IoU、GIoU、DIoU、CIoU损失函数的那点事儿
  2. arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题
  3. 计算机视觉与模式识别方面的代码code
  4. [原创]JMeter初次使用总结
  5. 【CentOS Linux 7】【Linux网络配置基础】
  6. paip.提升用户体验--提升java的热部署热更新能力
  7. struts2+hibernate+spring配置管理(一)-配置文件2
  8. /proc/sys/vm/drop_caches
  9. 绘图 | G2色块图
  10. PiliPala Player-a simple media player
  11. 初级程序员升中级程序员需要掌握哪些知识
  12. 计算机考研能换专业吗,考研调剂到材料专业,很后悔,还能转到计算机专业吗?...
  13. 移动端地图开发技术分享交流会PPT
  14. 调和曲线图和轮廓图的比较
  15. 计算机学校宣传片创意和构思,【差一步就会02】用PPT做影视宣传片
  16. a15仿生芯片和a15有什么区别
  17. arduino 读取模拟电压_Arduino内置教程-基本原理-读取模拟电压
  18. jQuery的css()如何修改背景图片
  19. 甘肃民勤农妇戈壁滩建“花花世界” 叩开致富之门
  20. 杰理之对箱TWS通话有回音,噗噗声,卡顿问题【篇】

热门文章

  1. JAVA判断当前日期是否是工作日,还是节假日
  2. Microsoft Visual Studio 2003 2005 2008 2010 2012 下载
  3. 一次多线程耗尽优化与处理
  4. 海康威视web插件层级遮挡问题,仅供参考
  5. 自媒体时代如何做好软文推广?
  6. 找完数——完数的使用
  7. JS数组、字符串、数字的相互转化
  8. Appium学习笔记17-手机操作API之分辨率
  9. Spring - 如何实现IOC
  10. 弘扬岭南画派爱国精神,广州市海珠区文博管理中心等联袂举办爱国名画进校园