《从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/
24 个解决方案
#1
大虾、老鸟们新年快乐
欢迎提意见、建议,
介绍两本对初学者及刚入门有帮助的书,
扩大C++ Builder群
欢迎提意见、建议,
介绍两本对初学者及刚入门有帮助的书,
扩大C++ Builder群
#2
支持一下,前几天写了个小东东还用的CB6
#3
CB6还是方便。
#4
#5
高版本的都不太会用了……前几天还在用D7写Demo
#6
为什么同时用CB和D?
#7
支持一下,前几天写了个小东东还用的CB6
高版本的都不太会用了……前几天还在用D7写Demo
为什么同时用CB和D?
CB6自己用,D7工作时写个测试Demo用
#8
能不能建个群什么的,好让我这样的初学者方便问,不然遇到什么问题没人教真是郁闷。。。
#9
因为时间问题,我QQ在线不多,如果有人建个群,我可以加入,我也是初学者,大家一起学习。
最好还是来论坛提问,这里前辈众多,有问题一般都能得到回答。
————
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符
最好还是来论坛提问,这里前辈众多,有问题一般都能得到回答。
————
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符
#10
表单里的控件删掉了,可代码文档里的代码怎么删不掉?
手动删,就出错。
手动删,就出错。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Hello.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Memo1->Clear();
//清除文本框
Form1->Memo1->Lines->Text="单击下面的OK按钮,您将会看到......";
//设置Memo控件中的文本内容
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Hello World!");
//显示一个"Hello World!"对话框
Edit1->Text=("Application->Terminate();");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->Terminate();
//程序运行结束
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ok11Click(TObject *Sender)
{
ShowMessage("Hello World!下面的OK按钮");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ok21Click(TObject *Sender)
{
ShowMessage("随着编程概念的更新,可视化编程已经成为人们关注的焦点,由Borland C++ \
发展而来 的Borland C++ Builder 6程序设计语言就是一种典型的可视化编程言");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Insert1Click(TObject *Sender)
{
Edit1->Text=("随着编程概念的更新,可视化编程已经成为 人们关注的焦点,由Borland C++ \
发展而来的Borland C++ Builder 6程序设计语言就是一种典型的可视化编程言。" );
}
//---------------------------------------------------------------------------
#11
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->Terminate();
//程序运行结束
}
想删Button2Click的代码
{
Application->Terminate();
//程序运行结束
}
想删Button2Click的代码
#12
在文件编辑窗口顶部标签按钮右键点击切换到头文件,把成员函数声明删掉试试。
#13
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
#14
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
#15
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
#16
请问:
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
#17
请问:
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
这个情况没碰到,以前会吗?百度一下看看。
你的CB是什么版本的?我的BCB 6.0的Lib目录是在C:\Program Files (x86)\Borland\CBuilder6\Lib,你看一下你的c:\PROGRA~1\borland\lib目录下有没有vcl60.#00,没有的话复制一个。
#18
回复了,
估计木马捣乱
估计木马捣乱
#19
你的CB是什么版本的?
C++Builder 6
#20
回复了,
估计木马捣乱
学会用ghost安装系统、ghost备份系统和恢复系统,新系统装好常用软件马上做个C盘ghost备份,以后遇到难于修复的问题,就用ghost把备份的系统恢复到C盘,10分钟以内系统如新。注意:所有创建的文档或者程序、照片等不要放在C盘,也不要保存在我的文档(没有专门设置也是在C盘)里,而是直接保存到D盘或者E盘的某个目录下,这样恢复系统的时候C盘的文档都会被格式化丢失,但不影响D盘等其它盘。
#21
学习了,现在不好解决了,将来求人帮忙了。
#22
我知道很难,但是我会坚持走下去,就按照楼主的说的方式
#23
我知道很难,但是我会坚持走下去,就按照楼主的说的方式
C++ Builder是RAD工具,虽然要学好也不容易,但是比MFC、Qt入门要容易多了。
#24
太棒了 正好刚刚要学 啊啊啊啊啊
#1
大虾、老鸟们新年快乐
欢迎提意见、建议,
介绍两本对初学者及刚入门有帮助的书,
扩大C++ Builder群
欢迎提意见、建议,
介绍两本对初学者及刚入门有帮助的书,
扩大C++ Builder群
#2
支持一下,前几天写了个小东东还用的CB6
#3
支持一下,前几天写了个小东东还用的CB6
CB6还是方便。
#4
#5
支持一下,前几天写了个小东东还用的CB6
高版本的都不太会用了……前几天还在用D7写Demo
#6
支持一下,前几天写了个小东东还用的CB6
高版本的都不太会用了……前几天还在用D7写Demo
为什么同时用CB和D?
#7
支持一下,前几天写了个小东东还用的CB6
高版本的都不太会用了……前几天还在用D7写Demo
为什么同时用CB和D?
CB6自己用,D7工作时写个测试Demo用
#8
能不能建个群什么的,好让我这样的初学者方便问,不然遇到什么问题没人教真是郁闷。。。
#9
因为时间问题,我QQ在线不多,如果有人建个群,我可以加入,我也是初学者,大家一起学习。
最好还是来论坛提问,这里前辈众多,有问题一般都能得到回答。
————
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符
最好还是来论坛提问,这里前辈众多,有问题一般都能得到回答。
————
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符
#10
表单里的控件删掉了,可代码文档里的代码怎么删不掉?
手动删,就出错。
手动删,就出错。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Hello.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Memo1->Clear();
//清除文本框
Form1->Memo1->Lines->Text="单击下面的OK按钮,您将会看到......";
//设置Memo控件中的文本内容
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Hello World!");
//显示一个"Hello World!"对话框
Edit1->Text=("Application->Terminate();");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->Terminate();
//程序运行结束
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ok11Click(TObject *Sender)
{
ShowMessage("Hello World!下面的OK按钮");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ok21Click(TObject *Sender)
{
ShowMessage("随着编程概念的更新,可视化编程已经成为人们关注的焦点,由Borland C++ \
发展而来 的Borland C++ Builder 6程序设计语言就是一种典型的可视化编程言");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Insert1Click(TObject *Sender)
{
Edit1->Text=("随着编程概念的更新,可视化编程已经成为 人们关注的焦点,由Borland C++ \
发展而来的Borland C++ Builder 6程序设计语言就是一种典型的可视化编程言。" );
}
//---------------------------------------------------------------------------
#11
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->Terminate();
//程序运行结束
}
想删Button2Click的代码
{
Application->Terminate();
//程序运行结束
}
想删Button2Click的代码
#12
在文件编辑窗口顶部标签按钮右键点击切换到头文件,把成员函数声明删掉试试。
#13
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
#14
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
#15
或者如果让函数体为空(有注释行也不行),保存一下就自动删除空函数了。
手动删除函数声明和定义,还要在属性管理器里把Button2的OnClick方法清掉(设置为空)
谢谢,解决了。
#16
请问:
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
#17
请问:
Linker Fatal Error Fatal: Type index 520206 is bad in module
c:\PROGRA~1\borland\lib\vcl60.#00
怎么处理?
这个情况没碰到,以前会吗?百度一下看看。
你的CB是什么版本的?我的BCB 6.0的Lib目录是在C:\Program Files (x86)\Borland\CBuilder6\Lib,你看一下你的c:\PROGRA~1\borland\lib目录下有没有vcl60.#00,没有的话复制一个。
#18
回复了,
估计木马捣乱
估计木马捣乱
#19
你的CB是什么版本的?
C++Builder 6
#20
回复了,
估计木马捣乱
学会用ghost安装系统、ghost备份系统和恢复系统,新系统装好常用软件马上做个C盘ghost备份,以后遇到难于修复的问题,就用ghost把备份的系统恢复到C盘,10分钟以内系统如新。注意:所有创建的文档或者程序、照片等不要放在C盘,也不要保存在我的文档(没有专门设置也是在C盘)里,而是直接保存到D盘或者E盘的某个目录下,这样恢复系统的时候C盘的文档都会被格式化丢失,但不影响D盘等其它盘。
#21
学习了,现在不好解决了,将来求人帮忙了。
#22
我知道很难,但是我会坚持走下去,就按照楼主的说的方式
#23
我知道很难,但是我会坚持走下去,就按照楼主的说的方式
C++ Builder是RAD工具,虽然要学好也不容易,但是比MFC、Qt入门要容易多了。
#24
太棒了 正好刚刚要学 啊啊啊啊啊