我的Visual C++入门之路(下)
三.内因与外因:“三心二意”和“高手朋友”你有吗?
啊哦,我不是在开玩笑。“三心”是指决心,信心和耐心。决心来源于动机,说来好笑,我最初动机很简单,大学时有个朋友,计算机系的,我总认为我比他聪明(我的天~~~~),他会VC我不会,我就想超过他,现在都毕业两年了,最初的动机早已经不在了,而学习却VC已经成了我的心愿——最关键的一点是我的愿望是写自己的输入法,而写输入法只能用Visual C++去实现,所以我会有决心学好Visual C++。至于信心,有两次失败完全是信心不足造成的,促成这次成功的信心说起来还挺传奇:我去北京玩儿,回家的火车上一姓赵位老师看见我别着一个MCP的领章就过来跟我聊天,得知他是一位有着十多年VC开发经验的程序员,敬意油然而生。聊天的过程中,赵老师给了我极大的鼓励和支持——我问他像我这种Wood Head能不能在半年内入门VC,他告诉我,一定能,于是我就坚定了自己的信心,现在刚好是4个月,如果赵老师有机会看到这篇文章——我在这里谢谢您啦!(花絮:下车,两个小时后我与女友分手了,是被甩呀同志们!随后的一段日子里,一直与VC相伴……) 还要说说耐心:如果您已经看到这里了,说明您很有耐心(竟然能看到这里还没有拂袖而去),耐心与个人的风格有关,没耐心的人多半是懒人,懒人什么都做不成,学习VC就是不能懒,书懒得看,问题懒得问,英语懒得译……或者是有点挫折就放弃,学好VC是没指望了。我不知道别人怎样,反正我是没少受挫,其实有两次离入门就那么一点点了,我放弃了……学VC要越挫越勇,学VC要肯定执着,Gogogo!
“二意”是指第一你要感觉学习VC有“意思”,二是你要感觉学习VC有“意义”。有意思,就是说你喜欢写程序,“三心”的源动力来源于你对程序设计的热爱,不喜欢编程的人可能能学好VB但绝学不好VC。有意义,就是说你要给自己一个理由:自己都不能给自己一个交待的事情是做不长久的。前面说过,我是为了写自己的输入法,解放中国人的双手,这个理由够纯洁够崇高,还有一个理由就是通过学习VC来砺练自己,成为一个真正的程序员。你可以有自己的理由,比如提高薪水或者取得认证云云,一定要有!这就像是给自己的“报酬”,没有报酬只凭激情做事是任何事都做不长久的。
我小小的成功,有严重的原因是因为我有位“高手朋友”——杨W,他是个VC高手,大家会好奇地问:他教你写什么呢?是MFC还是ATL或者是COM?呵呵,都不是,他从来没教我写过一行代码,但他对我的每一次帮助都弥足珍贵,当我不知道从哪里查找类库资源的时候,他告诉我:MSDN;当我不知道从哪里找到类的成员函数时,他告诉我:在页面的左下角有一个class member链接,当我问他能不能完成XXXX时,他说:别白费力气了……在他的帮助下,我少走了很多弯路,这也正是高手朋友的可贵之处。在此,我要衷心地说一声:谢谢!
并不是每位学习VC的朋友都有我这么好的运气,如果你身边没有这样的朋友也不用着急吗,我这位好朋友可是经常出没于CSDN的坛坛里,明白了?不过,提醒与我一样的初学者:一定要做一个会问问题的人哦!怎么做一个会问题的人呢?概括一下就是:目的明确,言简意赅,核心代码,客气谦虚。
四.VC入门随笔
本人写东西向来思绪凌乱、颠三倒四。剩下好多东西不知道写到哪里,没办法了,只好叫“随笔”咯。
……学习VC编程,首先要竖立一个“系统/全局观”。无论是VB、C#、Delphi,写程序的时候只需要考虑程序本身就行了,换句话说就是你不用考虑消息是如何映射和传递的。而VC写程序就要多多少少考虑到这些东西。打个比方:以前用VB写程序,就好像是在一座山上建一个亭子,山是山,亭子是亭子,我只管造亭子就是了;而用VC写程序,还是这个亭子,那么你应该意识到,亭子是山的亭子,是山的一部分而不是一个孤立的建筑。“亭子”就是程序,“山”就是Windows系统,亭子的地基是山留给建筑的“接口”,也就是API了……
……VC相对VB入门难,一上来不是像VB那样给个窗体从头做起,而且AppWizard要分好几步,每一步里还有一大堆不知所云的选项,不等生成一个程序就已经晕头转向了。怎么办呢?一句话,从对话框程序入手,因为它最简单,生成的类最少,而且相对是与VB编程最“像”的。在对话框程序里,你可以充分练习添加类和成员变量或者成员函数。……不过我有一点始终搞不明白,由易到难是对话框程序、单文档程序、多文档程序,在AppWizard里微软为什么不按这个顺序排列,非要倒着来呢?成心跟我们这些初学的做对!(国骂省去)……
……又是没大写……又是少分号……又是少一个等号……提醒VB转过来的程序员,别总像我这么没记性哦!
……还是提醒那些学习了VB或者是VB.NET/C#的DDMM,MFC的类虽然是面向对象的,但它没有“属性”这个概念地!不要指望有Me.TextBox1.Text="Hello World!"这样的语法,C/C++是函数型的语言,类已经把“属性”封装成了成员变量,那些私有的成员变量你看不到,只能通过函数来更改——this->myTextBox.SetWindowText("Hello World!");……
……晕,原来Win32程序和MFC程序不是一回事呀(看看,这就是一本烂书带给我的,让我一直以为Win32程序就是MFC程序,直到拜读《深入浅出MFC》时才恍然大悟)……
……VC好还是VB好?(拜托,别再问这种无聊的问题了)……
……VC的确能做底层,但不是最底层;VC的确功能强大,但不是万能的——拿手术刀切西瓜或者用菜刀动手术都不对……
……VC高手都是用记事本写程序的:笑不笑由你……
……VC程序员比VB程序员强:呵呵,毛主席说过,武器不是战争胜利的决定因素……
……在快速开发工具(RAD)中,控件与后台代码是捆绑在一起的,而MFC的“控件类”不一样,它的“资源”(或者说是皮)与“类”(或者说是瓤)是分开的,要通过ClassWizard把它们“粘”起来……
……如果说C++是一种程序设计语言,那么Visual C++中的C++语言不如叫“Windows语言”更合适——Visual C++就是在编程Windows,用到的宏或者Windows数据类型和Windows结构数不胜数,做好心理准备哦!……
……我的天,那么长的函数或者结构都要一个字母一个字母写呀!呵呵,按一下Ctrl+J看看发生了什么?我就奇怪了,几乎没看到有书上提醒我们的初学者要这样去做。这可是着实吓跑了不少初学者呢!(至少我就被吓跑过)。器利工善,我们要把IDE用熟哦,微软送的好礼物可不能浪费……
……很多书在添加完对新话框类之后都写着要在主对话框类里手动添加对这个新类头文件的引用,何必呢?用添加成员变量的方法添加这个新对话框类的实例,头文件自动引用,一举两得。一句话:尽量多用Class Wizard,能不手写的地方就不手写……
五.virtual BOOL LongWayToGo(void)
{
//头一次写文章,其中Bug肯定少不了,大家一起来DeBug。
//由于是入门级文章,如果有错误,很可能影响初学者学习,恐误人子弟,有错必纠!
//希望大家多提宝贵意见,帮助我前进,谢谢先!
//这是虚函数,留待有所得时续以后文。我还有很长的路……
return TRUE;
啊哦,我不是在开玩笑。“三心”是指决心,信心和耐心。决心来源于动机,说来好笑,我最初动机很简单,大学时有个朋友,计算机系的,我总认为我比他聪明(我的天~~~~),他会VC我不会,我就想超过他,现在都毕业两年了,最初的动机早已经不在了,而学习却VC已经成了我的心愿——最关键的一点是我的愿望是写自己的输入法,而写输入法只能用Visual C++去实现,所以我会有决心学好Visual C++。至于信心,有两次失败完全是信心不足造成的,促成这次成功的信心说起来还挺传奇:我去北京玩儿,回家的火车上一姓赵位老师看见我别着一个MCP的领章就过来跟我聊天,得知他是一位有着十多年VC开发经验的程序员,敬意油然而生。聊天的过程中,赵老师给了我极大的鼓励和支持——我问他像我这种Wood Head能不能在半年内入门VC,他告诉我,一定能,于是我就坚定了自己的信心,现在刚好是4个月,如果赵老师有机会看到这篇文章——我在这里谢谢您啦!(花絮:下车,两个小时后我与女友分手了,是被甩呀同志们!随后的一段日子里,一直与VC相伴……) 还要说说耐心:如果您已经看到这里了,说明您很有耐心(竟然能看到这里还没有拂袖而去),耐心与个人的风格有关,没耐心的人多半是懒人,懒人什么都做不成,学习VC就是不能懒,书懒得看,问题懒得问,英语懒得译……或者是有点挫折就放弃,学好VC是没指望了。我不知道别人怎样,反正我是没少受挫,其实有两次离入门就那么一点点了,我放弃了……学VC要越挫越勇,学VC要肯定执着,Gogogo!
“二意”是指第一你要感觉学习VC有“意思”,二是你要感觉学习VC有“意义”。有意思,就是说你喜欢写程序,“三心”的源动力来源于你对程序设计的热爱,不喜欢编程的人可能能学好VB但绝学不好VC。有意义,就是说你要给自己一个理由:自己都不能给自己一个交待的事情是做不长久的。前面说过,我是为了写自己的输入法,解放中国人的双手,这个理由够纯洁够崇高,还有一个理由就是通过学习VC来砺练自己,成为一个真正的程序员。你可以有自己的理由,比如提高薪水或者取得认证云云,一定要有!这就像是给自己的“报酬”,没有报酬只凭激情做事是任何事都做不长久的。
我小小的成功,有严重的原因是因为我有位“高手朋友”——杨W,他是个VC高手,大家会好奇地问:他教你写什么呢?是MFC还是ATL或者是COM?呵呵,都不是,他从来没教我写过一行代码,但他对我的每一次帮助都弥足珍贵,当我不知道从哪里查找类库资源的时候,他告诉我:MSDN;当我不知道从哪里找到类的成员函数时,他告诉我:在页面的左下角有一个class member链接,当我问他能不能完成XXXX时,他说:别白费力气了……在他的帮助下,我少走了很多弯路,这也正是高手朋友的可贵之处。在此,我要衷心地说一声:谢谢!
并不是每位学习VC的朋友都有我这么好的运气,如果你身边没有这样的朋友也不用着急吗,我这位好朋友可是经常出没于CSDN的坛坛里,明白了?不过,提醒与我一样的初学者:一定要做一个会问问题的人哦!怎么做一个会问题的人呢?概括一下就是:目的明确,言简意赅,核心代码,客气谦虚。
四.VC入门随笔
本人写东西向来思绪凌乱、颠三倒四。剩下好多东西不知道写到哪里,没办法了,只好叫“随笔”咯。
……学习VC编程,首先要竖立一个“系统/全局观”。无论是VB、C#、Delphi,写程序的时候只需要考虑程序本身就行了,换句话说就是你不用考虑消息是如何映射和传递的。而VC写程序就要多多少少考虑到这些东西。打个比方:以前用VB写程序,就好像是在一座山上建一个亭子,山是山,亭子是亭子,我只管造亭子就是了;而用VC写程序,还是这个亭子,那么你应该意识到,亭子是山的亭子,是山的一部分而不是一个孤立的建筑。“亭子”就是程序,“山”就是Windows系统,亭子的地基是山留给建筑的“接口”,也就是API了……
……VC相对VB入门难,一上来不是像VB那样给个窗体从头做起,而且AppWizard要分好几步,每一步里还有一大堆不知所云的选项,不等生成一个程序就已经晕头转向了。怎么办呢?一句话,从对话框程序入手,因为它最简单,生成的类最少,而且相对是与VB编程最“像”的。在对话框程序里,你可以充分练习添加类和成员变量或者成员函数。……不过我有一点始终搞不明白,由易到难是对话框程序、单文档程序、多文档程序,在AppWizard里微软为什么不按这个顺序排列,非要倒着来呢?成心跟我们这些初学的做对!(国骂省去)……
……又是没大写……又是少分号……又是少一个等号……提醒VB转过来的程序员,别总像我这么没记性哦!
……还是提醒那些学习了VB或者是VB.NET/C#的DDMM,MFC的类虽然是面向对象的,但它没有“属性”这个概念地!不要指望有Me.TextBox1.Text="Hello World!"这样的语法,C/C++是函数型的语言,类已经把“属性”封装成了成员变量,那些私有的成员变量你看不到,只能通过函数来更改——this->myTextBox.SetWindowText("Hello World!");……
……晕,原来Win32程序和MFC程序不是一回事呀(看看,这就是一本烂书带给我的,让我一直以为Win32程序就是MFC程序,直到拜读《深入浅出MFC》时才恍然大悟)……
……VC好还是VB好?(拜托,别再问这种无聊的问题了)……
……VC的确能做底层,但不是最底层;VC的确功能强大,但不是万能的——拿手术刀切西瓜或者用菜刀动手术都不对……
……VC高手都是用记事本写程序的:笑不笑由你……
……VC程序员比VB程序员强:呵呵,毛主席说过,武器不是战争胜利的决定因素……
……在快速开发工具(RAD)中,控件与后台代码是捆绑在一起的,而MFC的“控件类”不一样,它的“资源”(或者说是皮)与“类”(或者说是瓤)是分开的,要通过ClassWizard把它们“粘”起来……
……如果说C++是一种程序设计语言,那么Visual C++中的C++语言不如叫“Windows语言”更合适——Visual C++就是在编程Windows,用到的宏或者Windows数据类型和Windows结构数不胜数,做好心理准备哦!……
……我的天,那么长的函数或者结构都要一个字母一个字母写呀!呵呵,按一下Ctrl+J看看发生了什么?我就奇怪了,几乎没看到有书上提醒我们的初学者要这样去做。这可是着实吓跑了不少初学者呢!(至少我就被吓跑过)。器利工善,我们要把IDE用熟哦,微软送的好礼物可不能浪费……
……很多书在添加完对新话框类之后都写着要在主对话框类里手动添加对这个新类头文件的引用,何必呢?用添加成员变量的方法添加这个新对话框类的实例,头文件自动引用,一举两得。一句话:尽量多用Class Wizard,能不手写的地方就不手写……
五.virtual BOOL LongWayToGo(void)
{
//头一次写文章,其中Bug肯定少不了,大家一起来DeBug。
//由于是入门级文章,如果有错误,很可能影响初学者学习,恐误人子弟,有错必纠!
//希望大家多提宝贵意见,帮助我前进,谢谢先!
//这是虚函数,留待有所得时续以后文。我还有很长的路……
return TRUE;