ATL的GUI程序设计(前言)

前言

也许,你是一个顽固的SDK簇拥者;

也许,你对MFC抱着无比排斥的态度,甚至像我一样对它几乎一无所知;

也许,你符合上面两条,而且正在寻求着一种出路;

也许,你找到了一条出路——WTL,但是仍然为它的技术支持、它的上下兼容性感到担忧;

也许,你还有着更多的也许;

也许,这时候你看到了李马的这篇文章。

世界上的故事,往往就是由各种“也许”交织而成的。

我的转型

历史告诉我,在向别人推荐一样东西的时候,首先应该告诉别人你从中获益了多少,如是才能够使这一切更加具有说服力。比如我告诉你,我自从用了ATL之后,腰不酸了、腿不疼了、走路也有劲儿了,那么你没准儿就会对ATL产生些许的好感。是的,在《前言》的这一节里,我将以我自身的Win32 GUI程序设计经历来向你不遗余力地推荐ATL——因为我的这一系列连载就是以它为主题的。

2000年,我开始用Visual Basic学写Win32下(严格地说,当时的Windows 95并不能算是纯粹的Win32系统,它只是一个16/32位Windows的杂种)的程序。到了2001年,我开始厌倦它的运行库与运行效率,于是转投了Delphi。也许是Borland的粉丝不好做,也许是我厌倦了PASCAL的严谨,又也许是那种“真正的程序员用VC”的幼稚思想在作怪——总之,我又投向了VC。

一方面是我忒抠门儿,不舍得花钱买好书;另一方面,中国的MFC书籍琳琅满目鱼龙混杂而使我无法提起学习的兴致——反正不知道什么时候开始,我就开始强烈抵触MFC这个本无过错的Framework,而仅仅凭着杂志报纸上寥寥的几篇SDK文章和全英文的MSDN 6.0开始了我艰难的学习长征。所幸,这一路上虽然磕磕绊绊,但最终我还是到达了属于我的陕北。如果您于此期间曾经在网上或其它媒体上看到过我的Win32技术文章,就应该会发现这其中我极少涉猎MFC的任何内容——我不否认我对它存在着狭隘的偏见,虽然我在2005年完成的毕业设计是用MFC编写的。

SDK终究不是一个让人舒适的归宿,我想SDK的粉丝们都应该有着深深的体会。哪怕是你的代码增加到1000行,你都会觉得维护这些东西的难度非常之大——臃肿、堆砌、全局、耦合、复用性差——有太多丑陋的词语都可以用在这上面。是的,我的确说过我不喜欢MFC,但是我也同样不能否认用MFC编写的程序结构清楚、分流明晰——当然,如果你不是深入到MFC内部去看的话。举个例子来说,我所编写的进程查看器July的2.11版本就是用SDK编写的(这个版本是开源的),才1000行出头的代码就已经使得我难以驾驭它们了,以致于后来我不止一次地想重写之——我想过用MFC,甚至Delphi的VCL。不过,运行库的限制和庞大的EXE体积还是使我放弃了这些想法。

如果说MFC和VCL是生长在深宫名门的大家闺秀,那么WTL就可以算是一位浪迹天涯的绝色歌女。我在2004年的时候,曾与它不经意地邂逅。精良的设计、轻巧的EXE、无与伦比的效率——如果不是它的兼容性存在问题的话(如果不修改的话,WTL 7.1连它自己附带的某几个sample都无法通过编译),我几乎就要拜倒在它的石榴裙下了。

于是我继续迷茫,这种迷茫一直持续到了2005年我毕业之后。2005年8月的时候,为了研究不借助MFC调用ActiveX控件的技术,我接触了WTL的发端——为开发COM组件而设计的ATL。时至今日我似乎已经无法回忆起当时的景况,只记得一个月之后,用ATL重写的July v2.20就诞生了。

比起大家闺秀和绝色歌女,ATL则更像是一位温柔贤惠的朴实女子。

时间: 2024-11-01 06:00:17

ATL的GUI程序设计(前言)的相关文章

ATL的GUI程序设计(2)

第二章 一个最简单窗口程序的转型 我知道,可能会有很多朋友对上一章的"Hello, World!"ATL版不以为然,因为它并不能算是什么ATL程序--毕竟它只不过是有了个CComModule而已.不过不管怎样我还是要说,它几乎仍然拥有了一个ATL GUI程序的所有组成部分:入口.初始化.程序体.卸载-- "等等!"也许你会突然打断我,"--还有注册窗口类.消息循环呢?" 当然,对于一个完整的GUI程序来讲,这也是必要的. 貌似废话 不清楚你是否已

ATL的GUI程序设计(1)

第一章 不能免俗的"Hello, World!" 在这一章里,就像所有的入门级教程一样,我也将不能免俗地以一个"Hello, World!"程序开始我的教程.然后,我将逐步深入,向你介绍这个ATL版本程序中所有必要的信息.此外,我还将介绍一些Win32中你可能不知道的东西,包括WinMain的_t兼容以及如何在MessageBox中加入自己的图标等等. 接近,接近,再接近-- 可以说,所有"Hello, World!"程序的内容不外乎都是以十分有

VC ATL专题

ATL的GUI程序设计(前言) ATL的GUI程序设计(2) ATL的GUI程序设计(1) ATL/COM简单工程 ATL COM和ADO VC++与MATLAB混合编程及其应用 MATLAB与VC++混合编程实现一维小波多尺度分解. 基于VC++中ATL创建ActiveX控件的探讨 精通VC与MATLAB联合编程<十>--综合举例二 精通VC与MATLAB联合编程<九>--综合举例一 精通VC与MATLAB联合编程(八) 精通VC与MATLAB联合编程(七) 精通VC与Matla

查找程序的GUI版本

最好的方法是让查找程序一直保持运行,要查找什么东西时只需简单地切换到它,并键入要查找的名字即可.下面这个程序将查找程序作为一个"application/applet"创建,且添加了名字自动填写功能,所以不必键入完整的姓,即可看到数据:   //: VLookup.java // GUI version of Lookup.java import java.awt.*; import java.awt.event.*; import java.applet.*; import java.

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

GetClientRect和GetWindowRect封装

做GUI程序设计,经常需要获取窗口的大小,典型的代码示例如下: CRect rcSize; ::GetClientRect( hWnd, rcSize ); 这段代码获取了hWnd窗口客户区的大小.用的多了,就觉得每次都要事先声明一个临时 CRect变量很影响代码的 美观,如果您也有同感的话那么如下封装可能会适合你: class CClientRect : public CRect { public: CClientRect(HWND hWnd) { ATLASSERT(::IsWindow(h

java的单选按钮

单选按钮在GUI程序设计中的概念来自于老式的电子管汽车收音机的机械按钮:当我们按下一个按钮时,其它的按钮就会弹起.因此它允许我们强制从众多选择中作出单一选择. AWT没有单独的描述单选钮的类:取而代之的是复用复选框.然而将复选框放在单选钮组中(并且修改它的外形使它看起来不同于一般的复选框)我们必须使用一个特殊的构建器象一个自变量一样的作用在checkboxGroup对象上.(我们同样能在创建复选框后调用setCheckboxGroup()方法.) 一个复选框组没有构建器的自变量:它存在的唯一理由

《Python 3程序开发指南(第2版•修订版)》——导读

前 言 在应用广泛的各种语言中,Python或许是最容易学习和最好使用的.Python代码很容易阅读和编写,并且非常清晰,而没有什么隐秘的.Python是一种表达能力非常强的语言,这意味着,在设计同样的应用程序时,使用Python进行编码所需要的代码量要远少于使用其他语言(比如C++或Java)的代码量. Python是一种跨平台的语言:一般来说,同样的Python程序可以同时在Windows平台与UNIX类平台(比如Linux.BSD与Mac OS X)上运行--只需要将构成Python程序的

JDK中常用包及其类和功能详细剖析

JDK所提供的所有标准Java类都存放在Java包中,如java.lang包中包含了运行Java必不可少的系统类.由于系统会自动将java.lang引入,所以不需要在源文件中用import语句来显示地引入这个包.另外,Java跪地过java.util和java.io是必须提供的标准包,在JDK中常用的包有以下几种: 1.java.lang:语言包 2.java.util:实用包 3.java.awt:抽象窗口工具包 4.javax.swing:轻量级的窗口工具包,这是目前使用最广泛的GUI程序设