hATEmATH的网上田园

喂马 劈柴 做一个幸福的人
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
公告
  • ◇ 欢迎来到这里的每一位朋友。

    ◇ 无需注册即可评论或留言。

    ◇ 文章无"转载(ZT)"字样均为原创。

    ◇ "随笔分类"中包含我的所有随笔

留言簿(13)

随笔分类

随笔档案

文章分类

文章档案

相册

工具网站

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-125 文章-20 评论-449 Trackbacks-0


"勿在浮沙筑高台" - VC初学者入门指南

                               -- HateMath

转载请注明原创出处:HateMath的网上田园(http://blog.vckbase.com/hatemath/)

引言
    沉寂了三个多星期,一直在写这个东西。
    首先声明,我不是高手。我只用过几年VC,水平尚不及高手万分之一,但自认已经算是入门了。在此想和打算学VC却又苦于不知如何下手的朋友们聊聊如何顺利的通过入门这一关。

预备知识
    
    1. VC是一门语言吗?
    VC不是一种语言,而是一种集成开发环境(IDE)。利用VC,可以把源程序编写、编译链接、调试运行等各个工作放在一块完成,很方便。如果你学过8086汇编语言,一定会对其令人吐血的运行和调试方式印象颇深:) .那么,我们在VC里用的是什么程序设计语言呢? 是 C++。

    2.MFC是什么东东?VC和MFC有什么关系?
    常听学VC的人说起MFC,有本口碑不错的书名字就叫《深入浅出MFC》,那么MFC是什么呢?我们知道,C++是一种面向对象编程(OOP)语言,使用别人封装好的类(Class)可以极大的加快软件开发进度。而MFC,就是MicroSoft为我们提供的一个门类齐全、功能强大的类的集合,它的全称是:MicroSoft Foundation Class。我们平常所说的"学习VC",有一小半内容是指学习MFC的功能和使用方法。那另一大半呢?- 我不能马上告诉你,马上告诉你你印象不深:)

    3.什么是API函数?
    举个例子吧,如果让你在电脑屏幕中间打印一行字:"只要想做一件事,就一定有办法"。你会如何去做呢?在显示器上显示任何东西,本质上都是对硬件的操作,作为一个普通的coder,不可能也没有必要去深入到硬件层来实现这个功能。幸运的是,系统给我们提供了一系列函数,只要我们用C语言的方式调用这些函数,剩下的和硬件打交道的事情就由系统帮我们完成了。这些函数,就是传说中的API函数,全称:Application Programm Interface(应用程序接口)。在我们上面的例子中,可以先用API函数GetDC()取得桌面的DC,然后用TextOut()函数输出文字。事实上,要想扎实的学好VC程序设计,一定要理解和掌握这些API - 这就是另一大半内容。
 
一、思想准备
    真是有趣,学个程序开发还要思想准备?
    我无意夸大学习VC的难度,但是VC的入门比VB之类的难很多却是不争的事实。如果你曾经3个星期搞定VB(这里指入门),那么VC可能要花三个月的时间,这种普遍存在的学习困难差异使得很多人产生严重的挫折感甚至最终放弃。当然,具体要花多长时间和你原有的基础以及个人努力程度有关,稍后我会谈到需要哪些知识。而现在,我只希望朋友们能有这样一个认识:VC是比较难学的,我需要做好长期学习的思想准备。


二、学习流程
    谁都希望通过最短最好走的路到达目的地,学VC的人也不例外吧?然而有一些路是注定不能绕过的,绕过它们,你的知识就会就会变成无根之草,你就会在接下来的学习中举步唯艰。下面顺次列出学习VC所需要掌握的知识:
 
    1. C++程序设计基础

    2. Windows程序设计

    3. MFC的学习和使用

    如果你看到这里觉得有畏难情绪,请把"一、思想准备"再读一遍。
    让我来解释一下这三个知识点的关系。



    学VC必须要有C++的基础。不会C++而能学会VC纯属扯淡。说到这里我想调侃一下自己,因为我在上大二的时候曾经一时冲动要学VC,去图书馆借了几本书回来硬着头皮啃了半个多月,仍然一头雾水不知书中所云,遂放弃。现在回想起来,书写的比较烂固然是没有学成VC的一个原因,但关键是自己基础不够--除了VB啥都不懂,连"::"是什么意思都不知道,呵呵见笑了。所以如果你现在还不懂得C++,请务必学C++先。
    如果时间紧迫的话,也可以速成:至少应该搞明白面向对象编程的基本概念,比如类/对象/继承/重载 等等。
 推荐书目:利普曼 加.劳乔 著 潘爱民译 《C++ Primer 》、钱能的《C++程序设计教程》也不错。
               

    
    有了C++的基础后,接着应该学习的是windows程序设计。这个部分主要是在了解消息机制的基础上学习大量API函数的使用。首先你需要理解windows程序的事件驱动机制,然后就是花大量的时间来学习系统提供的API函数,并且使用它们进行简单的可视化编程。API函数成千上万,但是也不用有畏难情绪,只要把常用的百十个函数会用就行了。这个部分要占去你VC计划中的大部分时间-同时回报也是相当显著的,当你下大力气学好了这个部分,你会发现接下来MFC部分的基础知识很容易学。

    注意:有不少人畏惧这部分的学习而选择跳过去直接学习MFC,对此我的看法是:不可取。当你没有学会走路时,不要跑,否则往往会摔的很惨。侯俊杰先生说的”勿在浮沙筑高台“也是这个道理。而事实上当你潜心把这部分学好后,你会发现MFC的入门根本就不需要花什么时间。世上很多事情是需要水到渠成的,当你付出足够的努力往往就可以做成一件事(技术的事情尤其如此),不需要刻意去找什么捷径,古人说“大巧无巧术, 用巧者乃所以为拙”,真正的捷径就是不找捷径。
    推荐书目:Petzold 的《widnows程序设计》,有中文版的。为什么我只推荐这一本?因为它实在太经典了,一本足矣。


    当你终于学会了windows程序设计这个部分,请允许我提前恭喜你,你马上就要成功了。这时候再来看MFC,你难免会有这样的感觉:哈哈,这不就是对API函数的封装么?诚然,对于初学者来说,无非是用MFC建立个对话框或者单文档程序,里面放几个控件而已,而对控件的操作很大程度上都是用API函数,不同的是,这些函数被MFC封装了一下,用起来似乎更简单一些。
 推荐书目:《VC++技术内幕》、《深入浅出MFC》
    值得一提的是,关于MFC的学习,网上有一个非常好的视频教程,是 孙鑫 讲的。我看过,觉得他讲的确实很好,能把前10课看完就算入门了。该视频共20课,有2.2GB之大,大家有兴趣的话可以买盘或者用BT、电驴之类的下载,一个字:值。

  
   到此为止,你已经掌握了使用API函数和MFC进行简单可视化程序的开发,稍加训练做个简单的数据库或者网络的程序应该不成问题了。万里长征已经顺利的迈出了第一步,恭喜你!
 

三、问答(FAQs)

    Q:我不会c语言,有关系吗?
    A:没关系。你按照【学习流程】中说的123学就行。

    Q:我该装哪个版本的VC?
    A:版本并不重要, 就像你吃饭时先吃哪道菜一样. IDE的使用,一通百通。如果你实在没有主意非要我推荐的话, 那就装VC++6.0吧,最好是英文版的.

    Q:C++ 和 windows程序设计的学习可以用VC进行编译调试吗?
    A: 当然可以。具体方法网上找,相当简单。

    Q:VC的代码量太大,一个最简单的窗口都要百十行代码。不好办啊?
    A:VC就这个样,习惯了就好了。简易和灵活是天生的矛盾,VC偏向于后者。

    Q:什么是MSDN?我要不要安装MSDN?
    A:你可以把MSDN简单的理解为一种函数参考手册。对于VC程序员来说,没有MSDN是不可想象的。

    Q:API函数和宏定义太多太难记,我该怎么办?
    A:高中化学的原子量多不多?难不难记?但我相信当年很多人都记得常用元素的原子量。为什么?练的多自然就记住了,别亦无它,唯手熟而。
 
    Q:我学VC好一阵子了,觉得VC太难了,我该怎么办?
    A:谢谢, 这是我所遇到的最容易回答的问题:坚持,或者放弃。

    Q:如果用一句话来概括学好VC的关键方法,那是什么?
    A:亲手写代码, 从最最简单的程序开始,。不怕吃苦,编程、编程、再编程。

四、 结束语
    这篇文章删删改改写了好多天,但我仍然觉得不是很满意,毕竟理工科出身的河蚌很难像文科河蚌那样修出光彩夺目的珍珠。如果大家觉得哪些地方说的不清楚或者还有哪些需要说明,欢迎给我留言。
    联系方式: 
    1. Blog上直接留言
    2. HateMath2005@163.com

(完)

posted on 2006-07-21 14:56 hATEmATH的网上田园 阅读(4293) 评论(14)  编辑 收藏
Comments
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    晓寒
    Posted @ 2006-07-21 15:22
    问:为什么“建议装 VC++ 6.0。”而且还要“记得装英文版的,不要用汉化版。”?我觉得vc7.1就比vc6要好得多。
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    fastzhao
    Posted @ 2006-07-21 16:06
    呵呵!
    我不认为MFC应该在Win32 sdk之后学习!!
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    zuilang
    Posted @ 2006-07-21 20:28
    我还觉得c++可以和mfc一起学呢
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    一个咸蛋的唠叨
    Posted @ 2006-07-22 09:23
    MFC和API可以同时学习,可以相互促进理解。我个人建议先学好C++语法。至于STL,用得着就学,反正不难。

    我也推荐VC6英文版+VA,比.Net实惠。
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    晓寒
    Posted @ 2006-07-23 09:12
    to[一个咸蛋的唠叨]和快照. vc7.1就一定是.net?周星星还是用vc8呢.按照你们的理论周星星就是在使用.net了?

    我说的是,如果使用vc编程,我觉得vc7.1要好过vc6。vc6使用起来没有vc7.1友好。个人感觉而已。 :P
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    sjdev
    Posted @ 2006-07-23 21:59

    我觉得,WIN32重点是消息机制,MFC重点是框架
    C++和VC倒是可以一块学习(前提是知道消息机制)
    不过有C++扎实的基础,MFC就比较好学了
    譬如简单的继承关系,再譬如ATL
    如果C++基础不好,可以相得益彰
    如果C++基础好,可以轻车熟路






    卖油翁:我亦无它,唯手熟耳
  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    gmbros
    Posted @ 2006-07-25 08:55
    HateMath,你好!

        我们是在论坛中的一个朋友的介绍下看到你的Blog的。我们是VC的新手,最近正在为不知如何开始学习它而感到苦恼。你的文章为我们指明了方向。使我们感到眼前一亮。

        我们是从Delphi开发转到VC上的。我们用Visual Studio .NET 2003学习开发图形图像技术。我们在网上找了一些书,但是这些书讲的不细致,我们到现在居然不知道如何用代码修改窗体的标题。所以我们最近很有挫折感。

        昨天看到你的文章,我们在网上找到了你文章中介绍的书。我们一定会按照步骤好好学习的。

        非常感谢你的这篇文章。顺便说一下,这篇文章非常好,因为我们从文章中得到了我们想要的。我们很敬佩理科生,你们都很聪明!你的文章署名是HateMath,难道你不喜欢数学?我们数学不太好,但是我们很喜欢它。我们很崇拜和敬仰陈省身和丘成桐这两位杰出的数学大师!

  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    imjj
    Posted @ 2006-07-25 10:40
    "勿在浮沙筑高台"

    真讨厌候捷的这句话
    编程就是编程 非要搞的跟武侠似的 真是无聊


  • # re: "勿在浮沙筑高台" - VC初学者入门指南
    HateMath
    Posted @ 2006-07-25 13:16
    今天看到了诸位的留言,先表示一下感谢。
    我在写文章的时候就料到关于sdk和mfc的学习顺序问题肯定会有争议,我并不想再解释什么,一句话:你们说的都是对的---我说的也是对的。

    to gmbros:
    谢谢你的鼓励,文章能对你们有用,我也很开心:)
    学VC的中文书籍没几本值得看的,就像大多数的中文论文一样垃圾。
    我的数学确实很烂,还好我不用靠数学混饭吃,呵呵。
  • # re: 浅谈如何学习VC++
    fatsn
    Posted @ 2006-12-01 00:09
    哪里有英文版的VC++6下载?
    或者,直接用VS 2005之类的?
  • # re: 浅谈如何学习VC++
    HateMath
    Posted @ 2006-12-01 10:45
    to fatsn:
    当然可以,这就好像盖房子,我推荐你用普通砖,当然你用空心砖也行了.但盖房子所需的方法大致是相同的---就是我在文章里说的123
  • # re: 浅谈如何学习VC++
    noway
    Posted @ 2007-01-05 21:38
       听说Vista出来后,要抛弃32位api,而MFC是对32位api的封装,不知道mfc还能活多久?到底vc还能不能有前途。
     
  • # re: 浅谈如何学习VC++
    HateMath
    Posted @ 2007-01-06 21:26
    re :noway
    呵呵,你多虑了。1.当你学会了开轿车,再学开面包会很容易。2.万事万物皆有始有终,但更新换代并不会造成断代。喜欢,就学吧。你想这些问题,有点杞人忧天了,开个玩笑的说:)
  • # re: 浅谈如何学习VC++
    dad
    Posted @ 2007-04-18 20:15
    Petzold 的《widnows程序设计》,有中文版的. 
      这本书我找了很多地方都没卖的。
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]