闲聊桌面应用开发[Win16->Win32->ATL/WTL/MFC->WinForm->WPF/Silverlight/WinRT]
闲来无聊,正好小组人员讨论到桌面的开发,那把笔者接触的WIndows平台下的几个主要的发展过程聊一聊。
主要从概述,参考资料,图书等几个方面说起。
所有的界面开发都会涉及如下的几个方面的内容:
v 控件 [Contrrols Widget]及验证
v 绑定:数据绑定到控件和控件的内容反馈回数据
v 布局系统:
v 模式和支撑:和服务的通讯,MVC MVP MVVM等模式
史前期->WIN16
这个主要是Windows3.x的时代,这个时代笔者接触的不是很多,当年也主要是使用体验了。当年买了很多的3寸5寸的软盘把系统安装拷贝进去,找机房尝试使用了。
相比于DOS,打开了一个全新的窗口。
石器时代->Wind32
随着Windows 95 9x系列的发布,系统软硬件发生了翻天覆地的变化,此时的代码开发还是相当的原始,WinMain函数和消息循环每每都是手工的构建。当前笔者在最早的Windows CE系统构建工具软件就是完全使用WIN32编写的[当时对软件的大小要求很高],不过通过这个对整个的窗口程序的运行机理还是很清晰的。
开发工具上当时还流行的VC1.52 Borland C++[李维在borland的书有详细介绍]。
参考图书
Win32 API参考手册
Windows 程序设计(Charles petzold)
这些可以说是很经典的资料,至于网络资料,这时还很少。
铜器时代->Atl/Wtl/MFC
这个时期的经典工具VC6,到目前也有很多地方在用。VS开发工具也树立了霸主的地位。
v 控件
n 此时Spy可以看到一个软件的窗口句柄,后来由于这样的方式对资源消耗较大,DirectUI出现改进了控件的处理模式
v 绑定
n DDX UpdateData的使用也算是提供了一定的解决方案
v 布局系统:
n 很多是手动处理,还可以使用一些第三方的封装库
v 模式和支撑:
n 较少
参考图书
深入浅出MFC (侯捷)
深入解析ATL
网站
Codeguru.com
Codeproject.com
Vckbase.com
这些是比较常用的网站
铁器时代->WinForm
v 控件
n 沿袭MFC的形式进行了扩充
v 绑定
n 有改善
v 布局系统:
n 有较大改进
v 模式和支撑:
n MVP等Pattern and Practices开始在MSDN出现
WinForm算是比较短命的一个解决方案,后续被WPF/Sliverlight这类取代
参考图书
CLR Via C#
现代->WPF/Sliverlight/WinRT
这个作为微软.net战略的重点,和WCF WF WPF这三架马车,起到了一个重要的一环。
WPF这个界面框架针对以前的界面核心有显著的变化。
这个过程中出现的JavaFX没有造成冲击,随着sun的被收购归于沉寂。
v 控件:
n 很完善,而且可以方便定制
v 绑定:
n 双向绑定的优秀支持
v 布局系统:
n 相比以前很全面,有大幅度的提升
v 模式和支撑:
n MVP MVVM等大量实现
参考图书
WPF揭秘
WPF核心技术
WPF专业编程指南
Silverlight揭秘
网站
Codeplex.com 微软现在官方的开源站点,很多的开源代码都在这发布,如Pattern and Practices, Ado.net Entity等
由上可见整个桌面应用的开发历史发展随着软件硬件的发展而显著的发生着变化,很多人会说,每个都跟踪岂不是很累,其实,这些内容主要精通1个,再学习新的内容时都很快。毕竟再怎样发展,其核心的思想部分仍然是一致的。
闲聊桌面应用开发[Win16->Win32->ATL/WTL/MFC->WinForm->WPF/Silverlight/WinRT]的更多相关文章
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- ATL封装IE内核启示:使用Win32/ATL建立窗口
开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...
- ATL、MFC、WTL CString 的今生前世(转载)
转载:https://www.cnblogs.com/tekkaman/archive/2011/04/20/2022650.html 上文分析了ATL.MFC CString的设计和实现,我们不禁会 ...
- Win32++:可替代MFC的Windows桌面应用开发框架
写在前面 有过Win32编程经验的朋友都知道,使用Windows提供的API开发桌面应用是相当繁琐的,创建一个功能简单能接收并处理消息的窗口至少也得几百行代码.创建一个可视化的窗口一般要以下几个步骤: ...
- 使用Win32/ATL建立窗口的过程
有时候想写个几十kb的小程序,MFC实在是太大了,Win32有时又太麻烦,怎么办呢?用ATL写会更方便和轻量级一些 ATL和MFC不同的是,ATL并没有强制性封装WinMain函数,仅封装了WndPr ...
- 基于CefGlue的桌面应用开发
原文地址:http://johnnyfee.github.io/csharp/2013/12/21/cef-glue/ 前言 如果你想使用WEB技术来开发桌面客户端,并且是想使用的语言也是C#时,那请 ...
- Web桌面应用框架3:Web桌面应用开发的N种Style
研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式. 一.前端Style 这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效.著名的框架就是Electr ...
- Mac 桌面软件开发基础问答
1> Mac OS X平台下的桌面软件是由什么编程语言处理 答: 由Objective-C, swift编程语言处理 2> Mac OS X平台下的桌面软件是由什么框架构建 答: 由Coc ...
- 中文代码示例之NW.js桌面应用开发初体验
先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...
随机推荐
- 【Java基础】泛型
Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...
- NET中验证控件表达式汇总
ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效.这些控件如下: 1.RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交 ...
- Windows Azure Web Site (9) Web Site公网IP地址
<Windows Azure Platform 系列文章目录> 本文会同时介绍国内由世纪互联运维的Azure China和海外Azure Global. 熟悉Windows Azure平台 ...
- SQL Server 存储(4/8):理解Page Free Space (PFS) 页
我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(Page Free Space (PFS) ). PFS在数据文件里是第2页(页号1,页号从0开始),接 ...
- 简单的描述Java中的构造函数,及访问修饰符
作为一个Java 初学者,对Java的理解可能有些片面,甚至有些错误的理解,对于观看此处的您,希望您选择性观看!!! 访问修饰符: 1.常用访问修饰符: public 共有的 private 私有的 ...
- LINQ to SQL语句(2)之Select/Distinct
适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来:延迟.Select/ ...
- 插入排序---希尔插入排序算法(Javascript版)
取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...
- MVC EF中Attach和Entry区别
EF:加入容器三种方式-->查询,attach,entry.不在容器里,不能用remove,add等方法. 1.0 使用Attach可能会出错.//attach 意思:附上; 贴上,系;var ...
- ASP.NET Core开发-MVC 使用dotnet 命令创建Controller和View
使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使用yo 来创建Controller和View. 下面来了解dotnet 命令来创建Contr ...
- WinForm三级联动
窗体中方三个combobox Form1 中的代码 AreaDataBind函数 new chinaData().Select()函数 找到combobox属性里面的事件 selectedindexc ...