C++ Builder(BCB)从初学到入门
关于C++ Builder,可以参考一个入门的简单例子作为了解:
《从C语言的菜单界面管理系统到C++ Builder的图形用户界面,一个简单的电话簿Demo例子》
http://blog.163.com/tab_98/blog/static/1192409720158673337998/
首先初学者要有C++的基础知识,类、继承、多态的概念等,这是最起码的,就不说了。
学习C++ Builder(BCB),初学者最主要的资料当然是需要一本入门书,我手头我两三本这样的书,没有特别理想的。其中一本是《C++Builder 6程序设计教程(第二版)》 (陆卫忠,刘文亮 等编著 /2011-04-01 /科学出版社),另一本是《C++Builder 6.0基础教程》(赵景波 等编著 /2004-09-01 /机械工业出版社),前者我看了前面部分,后者只是买来对比翻了翻,觉得前者介绍的控件和例子比后者较为丰富一些。前者只有少数二手书了,后者有再印刷的新书。在校学生可以去图书馆找找,说不定有更好的入门书,C++Builder 6.0、5.0甚至4.0、3.0都是可以的,基本部分的控件、知识都是相同的。
学习了入门的第一本书,对C++ Builder的开发环境,添加控件到窗体,设置窗体、控件的属性,编写窗体、控件的事件处理函数(如Button1的OnClick事件处理函数),常用控件的基本属性、方法和事件,等等,就较为了解了,可以编写一些简单的图形用户界面的程序了。
这时,我们会好奇一些较实用的、较大一点的案例程序是怎么编写出来的,一个程序的文件组织,各个单元是怎么安排的,等等。这时候,一本案例解析的书就是必要的了,通过几个案例的具体分析过程,我们不但了解了整个流程,还学到了一些控件、类的特定用法,一些程序技巧等等,不但有了感性认识,也扩大了知识面。这样的书相信图书馆里有不少,我推荐一本PDF——《C++Builder6编程实例精解》(赵明现),是数字版的,非扫描版的,里面还有一个俄罗斯方块游戏的完整实现。
此时,我们可能想要模仿编写几个程序,或者课程设计要求编写程序。但是,自己写程序,就好比小学生写作文,最起码要先认识3000个汉子吧,又好比医生开处方,药房的常用药总要了解吧。C++ Builder的类库是VCL,我们只了解常用控件的基本属性和方法,如同冰山一角,VCL庞大的类库如同迷宫,如何才能得其门而入,如果才能一窥究竟。其实,我们只要了解VCL类树主要枝干:TObject—TPersistent—TComponent—TControl—(TWinControl,TGraphicControl),如下图所示,就能提纲挈领,纲举目张。
这里,根据论坛网友的推荐,以及自己的寻找,推荐几本书。一本是《C++Builder深度历险》(台湾 陈宽达),此书有数字版PDF,推荐其中的一章《VCL基本心法》,让我们对VCL的整体有通俗易懂的理解。此书还有两个游戏的完整实现,也是很推荐的。
一本是《C++Builder 5高级编程技术—IDE与OOP编程[按需印刷]》(徐新华)(http://product.china-pub.com/10297#ml)(互动出版社有按需印刷,价格稍贵),此书的第九章:
第九章 VCL的结构 207
9.1 概述 207
9.2 TObject 208
9.3 TPersistent 211
9.4 TComponent 212
9.5 TControl 217
9.6 TWinControl 238
9.7 TGraphicControl 252
9.8 TCustomControl 253
对这几个核心的VCL类的主要属性和方法做了介绍,并有部分示例代码。因为几乎所有的控件都是继承下来的派生类,所以它们都拥有这些共同的属性和方法。因此,我们就学习了小学生作文的最常用的3000个汉字,具备了VCL的基本知识,由初学变为入门了。
另一本是论坛DelphiGuy推荐的《Inside VCL(深入核心——VCL架构剖析)》(台湾 李维),此书恰如其名,对VCL的底层实现原理做了深入剖析,溯根究理,堪称天书。书中大量引用了VCL的源代码,因为VCL是Delphi和C++ Builder共同的类库,所以VCL是用Object Pascal和部分汇编语言编写的,不过个人觉得Object Pascal和C++面向对象语言几乎是一一对应的,再加上书中对代码都有解释,所以只会C++也不难看懂,个别不懂的Object Pascal关键字百度一下即可。我看了前五章(代码差不多能看懂90%),VCL类库对Windows API的封装、VCL的消息机制确实是机巧天成、点石成金,才换来RAD的编程环境和用户Windows编程的极大简单化、人性化。
理解了VCL的底层原理和核心枝干,其它的枝枝叶叶便不再难了。对一个具体的控件的属性、方法等,正如版主ccrun强调的,Help文档是最好的资料。如何查Help,可参考此文:《(BCB)C++ Builder 6.0在Win7下如何使用帮助Help》(http://blog.163.com/tab_98/blog/static/1192409720160251029113/)。有一些常用的类,比如TForm、TApplication、TScreen、AnsiString(如Edit1->Text的类型)、TStrings(如ComboBox1->Items、ListBox1->Items的类型是TStrings*)、TStringList、TList等类的方法、属性等,应该较为了解。
文件的读写是很重要的。在C++ Builder中,我们可以用C的文件读写库函数、C++的流(fstream)或者基于C++ Builder的文件操作函数。
流类也是很重要的,C++ Builder中有TStream、TFileStream、TMemoryStream、TResourceStream等重要的流类。
对于一些具体的主题,比如绘图,很多控件(比如从TGraphicControl继承下来的控件,以及TForm等)都有一个Canvas属性,可以利用这个Canvas绘图。因此,我们需要了解TCanvas类、TPen、TBrush、TFont、TColor、TGraphic、TBitmap、TPicture、TJPEGImage、TImage、TPaintBox等,就可以绘图、贴图了。
对于一些具体的主题,比如消息映射、DLL技术、网络编程、多线程、剪贴板操作等等,C++ Builder书名中带“高级”的书一般都有涉及,看看例子,应该不难学会,我也正准备接触这些主题。
关于数据库编程,我只做过一个作业,参考书上的一个例子,用的ADO技术,只用到ADOConnection、ADOQuery、DataSource、DBGrid等几个核心组件,当然,SQL的知识是必需的。数据库管理系统的编程是C++ Builder最擅长的事,这方面主题的书是很多的,学校图书馆里应该就有很多。
对于很多人感兴趣的小游戏编程,前面介绍过的两本书里都有小游戏的例子,我再提一本书——《精彩C++Builder 6程序设计》(台湾 吴逸贤),里面有10几个简单小游戏的实现,可以自己看懂以后再重写,才是自己掌握的。还有一本书《Delphi经典游戏程序设计40例》,里面不是完整游戏的案例,而是游戏中用到的方方面面的主题、技术等,虽然是用Delphi编写的,但前面说过Object Pascal比较容易看懂,而且用到的VCL控件都是相同的,所以对于C++ Builder游戏编程也是大有裨益的。
此外,说一下调试的重要性,有时候代码看起来正确无误,执行结果就是不对,经过设置断点、执行到断点、单步执行,观察变量的值,才会发现我们没有考虑到意外情况的处理,才出现执行结果的不对。C++ Builder有一个调试小技巧很有用:在窗口标题栏输出变量的值(http://blog.163.com/tab_98/blog/static/11924097201601415926984/)
说了这么多,我们编程如果遇到不会的用法、技术点怎么办?一是百度,二是谷歌,三是论坛。百度的时候,如果找不到C++ Builder相关的,我们可以用Delphi做关键字来搜索,然后把Delphi的代码翻译成C++ Builder的就可以了。还有一些网站(比如C++Builder研究:http://www.ccrun.com/),一些有关C++ Builder的博客,经常逛逛,可以了解一些有用的主题和技术,也能扩大自己的知识面,说不定将来哪天就可能用到这些主题或技术。另外,也推荐两本书——《C++Builder精彩编程实例集锦》、《C++Builder编程技巧、经验与实例》,里面都是一些特定主题、技术的集锦,虽然有一些百度也有,但是有备无患——手里有粮、心里不慌嘛。
最后,Windows平台的编程,不管是用VCL类库、还是MFC类库,归根结底都是对Win32 API的调用。对于一些很“高级”或者很特殊的需求,VCL类库没有封装这样的功能,就只有依靠Win32 API来实现了。所以,有能力的同学,修炼好Win32 API编程的功力,RAD+SDK双剑合璧,将使C++ Builder编程如虎添翼,无往而不利。
最后的说明,本人也只是入门水平,看的书、编的程序、接触到的主题都很有限,所以以上的认识不仅不全面,也未必准确,有些话甚至不是我这个层次的人该说的。我只是喜欢C++ Builder,喜欢RAD,喜欢人性化,所以想把C++ Builder推荐给有了C或C++基础,想进一步学习图形用户界面编程的同学,希望你们对C++ Builder有所了解,进而学习、使用、喜欢C++ Builder。也希望论坛的大虾、老鸟多提意见、建议,弥补我认识的不足,进一步修改本文,以飨更多和我一样曾经难以选择的初学者。
(赵二传 写于2016.2.5 本人博客:http://blog.163.com/tab_98/)
—————————————————————————————
有关:《学C++还是C#、Java?》
http://blog.163.com/tab_98/blog/static/11924097201511274543737/