VC学习

世上本没有平坦的大道,成为高手须经磨练!

我的观点是   

  C和C++是必须学的,先用C++   builer好了,最好再研究一下VC,没事了再研究用C做windows编程(别陷的太深),这样可以对底层多了解一下,如果你非要在多个平台下开发,那就在LINUX下学C,最快,我推荐中软linux3.0.   

    

  如果你想掌握第二门语言,我推荐java,工具最好用jbuilder,很好用.在WINDOWS   和linux下都能开发   

    

  如果你想学第三门语言,我推荐c#,因为微软是不可忽视的   

    

  好了,就这些吧   

    

  首先,你要明白:   C语言是开发任何软件的基础.   不懂C语言,就不会在软件业有发展.   

    

  其次,你要深知:   C++是面向对象的,而C语言只是面向过程.   面向对象是软件开发的现时特征.没有   

  OO,你还搞身么软件?   所以,C++也开发任何软件的基础,是面向对象(OO)的基础.   

    

  第三,有了C语言,有了C++,你就具备了横渡软件海洋的能力,确切地说,是一种体力.   如果你想游着横渡海洋,那么你就要学会游泳,那么你就要学习Windows   C,就是人们通常说的SDK,或称API,它是可以在Windows环境下开发窗口程序的C语言.在这里,你会体会到天高任鸟飞,海阔凭鱼跃的感觉.   

    

  第四,如果你不想游着横渡海洋,那么你可以划船过去.   这样,你可以去学习Visual   C++,   就是人们通常说的MFC,   它这里有很多现成的类库,   比你游着横渡海洋要省力得多.   

    

  所以,学习Visual   C++(MFC)是你的终极目标.   但是,你不能直接去学它.试想一下,如果你在划船的过程中,遇到风浪不幸落入海中怎么办?   所以,你必须先学会游泳(Windows   C).   如果你虽然学会了游泳,但又没了体力怎么办?   所以,你就必须要先练就体力(C   及   C++).   

    

  C,   C++,   Windows   C,   MFC就是这样的关系,这只是我的拙见,但希望对你有所启发. 

一、VC是什么?学VC是学什么? 

首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试) 

C和C++。但C++中的有些特性是不用的,例如I/O流,多态继承 

WindowsSDK(软件开发工具) 

VC的灵魂:MFC(微软基础类库) 

ATL(ActiveX模板类库) 

其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG) 

VC是许许多多技术的综合,就好像少林72般绝技,一般在应用中学会其中很少一部分就够了。我们的现在目的,其实不过是学一套少林长拳。这套长拳应包括: 

1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。 

2、C语言基础 

3、C++最基本内容:类、继承性、封装性、多态性的概念 

4、如何用向导建立一个程序框架 

5、设计菜单 

6、设计工具条 

7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等 

8、知道怎样新建类、成员函数、成员变量、消息处理函数。 

9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、弹起、移动,初始化对话框,等。 

10、了解最简单的GDI(图形设备接口):写文字、画框、画点、画线、画圆,设置画笔、画刷。 

11、熟悉最常用的MFC类: 

CWnd 

CDocument 

CView 

CDC 

CDialog 

CWinApp 

CGdiObject及子类 

CString、CPoint、CRect、CSize等简单数据类型 

CFile 

以上提到的这些内容,是每个人都会用到的内容。 

二、MFC简介 

上述主要内容都是与实际操作关系非常密切的,在此不可能讲清楚;而且,这些在一般的书里都会讲到。我主要将最重要的MFC介绍一下。 

MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。 

下面介绍最重要的MFC。 

CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,一开始也不必学,知道就行了。 

CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写) 

CView视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,你打交道最多的就是它。 

CDC设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。 

CDialog对话框 

CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。 

CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。 

CPen笔,画线 

CBrush刷子,填充 

CFont字体,控制文字输出的字体 

CBitmap位图 

CPalette调色板 

CRgn区域,指定一块区域可以用于做特殊处理。 

CFile文件。最重要的不外是Open(打开),Read(读入),Write(写) 

CString字符串。封装了C中的字符数组,非常实用。 

CPoint点,就是(x,y)对 

CRect矩形,就是(left,top,right,bottom) 

CSize大小,就是(cx,cy)对(宽、高) 

三、用好MSDN和例子 

作为提高,推荐看的例子有: 

nHello最简单的程序框架 

nScribble鼠标绘图。教程:编程基础,GDI 

nDiblook图像处理最简单范例 

nMFCIE因特网浏览器 

nEnroll数据库 

nDaoviewDao(数据访问对象)范例。树型和列视控件 

nCubeOpenGL范例,画一个不断旋转的方块 

nHierSvrOLE服务器 

nOclientOLE包容器 

nDrawcli鼠标绘图。也包括OLE。 

nWordPad写字板。OLE 

四、几点经验 

A.为什么要用Windows而不是DOS编程 

Windows编程并不比DOS编程难很多,只是在刚刚接触的时候感到头绪繁多,不知从何下手。实际上,如果你会C语言,你会发现Windows编程的难度并不比当年学C语言时大。DOS编程要想成为高手,也需要学习几百个函数(无论是TC、BC、MicrosoftC),并要深入了解汇编语言级的DOS功能调用。而现在在Windows下,付出相同的工作量,你却可以获得几倍的收益。如果你以前熟悉DOS编程,现在再搞Windows编程,只要两个星期肯定会感到巨大的优越性:在DOS下,每一件事都要自己干,而且还有64K内存、显示精度等的限制,实在是事倍功半了。 

B.为什么要用VC而不是其他Windows编程语言 

n大多数大型软件(包括Windows自己)都是用C、C++编的,所以可以利用的源代码特别多。例如Photoshop,就有VC的编程接口。的其他的语言都不如VC有历史优势。而且VC的开发工具特别多,从控件公司到硬件开发商,其产品很少敢不提供VC接口的。 

nVC适合组织大工程(VB就不行) 

nBorlandC++或C++Builder也很不错,并不比VC差。但BC的版本兼容性不好,从3.1到4.0就出现“代沟”,而且VC提供了极为丰富的文档和范例,VC的参考资料也远比BC多。并且VC与其他的VisualStudio成员可以协调工作,对软件工程有利。 

C.开始不要学WinAPI编程,但以后最好学学WinAPI 

特别要注意,开始不要买讲WindowsSDK编程的书。一个臭名昭著的例子就是“HelloWorld”。各种计算机语言在入门课中往往都给出一个例子,显示一行文字“HelloWorld”,无论是在Basic、C、Pascal,甚至汇编中,这个最简单的小程序都几行就可以写完。但在早期的Windows编程中,刚才讲到的“HelloWin”这个有名的例子就要组织一个工程、写上几百行代码才能实现。这就吓跑了很多想学Windows编程的人。实际上,在Windows下显示“Helloworld”,最简单的方法只要5行就够了: 

#include“windows.h” 

voidWinMain() 

MessageBox(NULL,”HelloWorld!”,”MyFirstWindowsApplication”,MB_OK); 

当然这个程序只建立了一个最简单的对话框,但这已经够了。 

如果你没有SDK编程的经验,学VC就是要利用MFC绕过Windows编程的许多细节。有好的工具为什么不用呢?现在你在VC写一个”HelloWorld”,只要写一行代码就可以了。 

voidCYourView::OnDraw(CDC*pDC) 

//…….其他的代码 

pDC->TextOut(100,100,”HelloWorld!”); 

但MFC不是万能的,WinAPI和VC中有很多功能在MFC中并不能反映出来。在入门后,要想发挥VC的完全能力,WindowsAPI还是非常重要的。而且,这些API在其他Windows语言中也用得到。 

学语言,与练武道理也差不多。VC、VB、Dlphi、VFP,以及其他的Windows编程语言,都属于同一个门派:Windows门,虽然招式不同,但内功都是一样的,这就是WindowsAPI(应用编程接口),大概是两千个函数。任何武功,招式即使再复杂,通常也能在很短时间内记下来;但内功就不是一朝一夕的事。而且,各门派的内功不同,Unix、Linux门有Uinx的内功,Apple(苹果)门有Mac的内功,Java更是自成一派。我们这里说的学VC,只是学招式,学招式一个月差不多就够了,聪明的两个星期就可以掌握。光学招式,吓唬人是够了,但和高手一过招,非出丑不可。要想精通VC,必须熟悉WindowsAPI。 

D.高级语言与自然语言 

一门高级语言与一门自然语言是类似的。关键要素有三: 

语法:了解C和C++基本语法,这是比较容易的。 

修辞:编程的艺术和风格。通常,这是与软件工程联系起来的。算法上的小伎俩并非是关键的。严谨,严格按照规范去做,同时又能发挥出极大的创造性,才是语言学家的本色。 

词汇:如何利用别人的工作?如何利用自己以前的工作?这是一个软件工程师成功的关键。如果词汇量不丰富,就写不出好文章,就会有想法表达不出。一个人的语法在上小学之前就基本上学成了,修辞水平也在年轻时就确定了,惟有词汇量需要根据需要不断学习、不断扩充。VC编程中,拥有大的词汇量就意味着要掌握较多的类、函数和其他编程组件。如:WindowsSDK,MFC,以及你所专攻的领域的现成的SDK,比如3D编程中的OpenGL,多媒体编程中的DirectX,图像处理中的Victor库。另外,ActiveX控件的掌握往往也是成败的关键。我们这几年的工作也总结成了一个类库,叫IPX(图像处理框架),大大简化了图像处理的工作;不过现在还有很多细节问题要解决,如果有同学感兴趣可以参与这方面的工作。 

学习VC,千万不要用我们在学校里学英语的方法,而要用小孩学说话的方法。所谓学英语的方法,就是我们在本科时学C语言的那种模式:详细搞懂每一个细节,背大量的规则,很少上机实践,没有实际问题供解决,最后由考试来断定学习成果。这种模式的后果大家都清楚:我们学了十几年英语,可有不少人还只会四五千个单词,写百把字的文章,不会说,不能听;尤其要命的是,看不懂VC的帮助文档。我们要象婴儿一样,在使用中学会语法、修辞和词汇;一开始肯定只能编出最糟糕的,就好像小孩开始只会说:“爸爸坐车车”;但“爸爸”“车车”这些词对小孩是最需要的,学习的效率反而最高。学VC的时候,应从我的需要出发,先做一个最简单的东西,然后一点一点复杂起来,象滚雪球一样。 

学习VC尤其要和别人交流,你苦苦思考不明白的,也许别人早就解决了。一定要善于学习:从书店找出有用的书;向身边的高手学习;寻找可以利用的源代码、类库、组件、控件、库;如果能上互连网,那就更加能解决问题了。

编程方向有两种,你要认清哪条路,一是学习标准C,正如楼上有人说,标准C在开发unix和linux应用程序以及底层的windows设备驱动程序(特别是信息通信专业,用得比较多)中比较合适,这个方向在诸如华为的大公司里很有用。这个方向不是要编写简单的Windows应用程序,而编写Windows应用程序是非常简单的事情。使用C开发上述程序,更面向底层。我用VC遍了四年的Windows应用程序,而这个方向我还一窍不通。

第二种当然就是Windows应用,比如,数据库、多媒体、网络程序,大都有图形界面。这个方向上编程工具是很多的,VC、Delphi、VB、BCB等,甚至VFP、PB也应算。然而的确C++是主流,可使用Delphi、VB的人不少,招聘Delphi、VB的单位也很多。这些语言各有长处,如果要选择编程这个行当,只学一门语言是不行的,不过好在一通百通,如果始终你只会一种语言,你很快就会落伍或者被淘汰,尽管也能拿到高工资,如果你要在有足够编程经验之后,上升为系统分析员,项目主管,那更是要通晓各种语言。

我个人认为,学会VC其他语言就只是个语法问题,我也写过Delphi和BCB程序,很快就上手。VC和BCB的基础就是C++,所以不能不学习C++。我只从头到尾通读过一本C++的书,也是非常好的一本书。之后那本书就一直不在身边,就钻进VC里了。

但VC毕竟上手困难,其他语言却相反,诸多矛盾让我也说不好先学哪个。不过就长远看VC是必须要学的,除了不想拿高工资,或者准备35岁退休的程序员。35岁以后,青春过去了,该作些什么呢?要么自己开公司,要么做个分析员、项目主管,工资仍然很高。再有,微软有垄断之心,这不VS.Net出来,楼上也有人谈及,那么VC的学习更加显得必要和紧迫,无论它有多难。接下来就还要学习C#、及VS.Net的框架,快速转向VS.Net。

当然还有很多编程领域和工具,还应该学习动态网页编程(ASP或者PHP或者Perl等),是不是还要学习Java呢,如果你雄心勃勃,这些都应该会。

转载于:https://www.cnblogs.com/shiney/archive/2011/07/04/2097711.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值