关闭

如何在短期内学好VC

标签: windowsmfc编程图像处理语言winapi
1522人阅读 评论(1) 收藏 举报
分类:

一、本文目的

二、范例:如何通过向导建立一个程序框架

三、学VC的目的

四、学VC要学的基本内容

五、MFC简介:CWnd、CDocument、CView、CDC、CDialog、CWinApp、、CGdiObject、CString、CPoint、CRect、Csize、CFile

六、学习的软硬件条件

七、几点经验


1、 我们的目的:

如何速成VC,在1个月左右的时间掌握VC的最基本内容。

想在一节课将清楚VC,就好象要在一节课里教会一门外语一样。在这里,我讲的不是如何编写VC程序,而是谈一谈自己在学习 VC中的一点经验。这主要是围绕着怎么找一条捷径,不走弯路,在短期内学好VC。VC太强大了,好象一个大宝库,如果没有目的的去瞎逛,反而走许多冤枉路。要根据自己的目的先学对自己最有用的,再在实践中不断学习。总之要学以致用。


2、 一个简单的例子(在VC6下)

1、用VC的MFC AppWizard建立一个工程,比如名字为“Hello”,功能是做一个Internet浏览器。具体怎么做任何一本书第一章都会讲,在这里没有计算机,说也说不清楚。这是极其简单的,1分钟能学会;步骤就是做几个选择题,一共有六步,每次都使用缺省的设置,注意在第6步选择视图类CHelloView的基类为CHtmlView,然后按”Finish”,VC就为我们建立了一个应用程序框架(AFX)

2、 这个框架一共有6个类。如果有些概念现在不清楚,先把它接受下来就是了。

CHelloApp 应用程序框架。

CHelloDoc 文档类。(CDocument)

CHelloView 视图类。 (CHtmlView)

CMainFrame 主框架窗口。(CMDIFrameWnd)

CChildFrame 子框架窗口。(CMDIChildWnd)

CAboutBox 关于对话框。该类非常简单,就是显示版权信息。(CDialog)

3、按F7编译

4、按Ctrl+F5执行

5、拖动任何一个html文件进入窗口,就可以浏览这个网页了。

一个因特网浏览器就这样做好了,非常简单,一句代码也没有写。如果没有VC,想做出来那是太难了。


3、 你为什么要学VC?

要根据自己的目的来选择学VC或其他的语言,如果选择了VC,究竟要学到什么程度?

(按照如下的排列,所需程度增加)

——你需要在求职中具有优势。

——你要进行如图像处理这样的算法研究

——你现在需要开发一个软件(而不仅是编写一个程序)。

——你是一个疯狂的计算机迷。

——你认为编程是一种艺术,想把它作为终生爱好。


4、 VC是什么?学VC是学什么?

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

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

l Windows SDK(软件开发工具)

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

l ATL(ActiveX模板类库)

l 其他的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类:

l CWnd

l CDocument

l CView

l CDC

l CDialog

l CWinApp

l CGdiObject及子类

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

l CFile

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


5、 MFC简介

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

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

下面介绍最重要的MFC。

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

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

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

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

l CDialog 对话框

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

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

l CPen 笔,画线

l CBrush 刷子,填充

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

l CBitmap 位图

l CPalette 调色板

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

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

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

l CPoint 点,就是(x,y)对

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

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

l

6、 学习的条件

如果希望在短期内(一个月)学好,

l 首先要有一个目标:我到底要用VC来干什么?是不是非要用VC或用VC最好?如果目的不明确,或错误选择了VC,最后会在VC中迷路。

l 希望你每天能投入8个小时以上。最好能一天到晚在计算机前泡着。

l VC5需要370M硬盘(帮助170M),VC6需要大约800M(包括例子和帮助,否则只要300M)。Pentium100对起步够用了。最低条件,我去年是在486DX2-80、850M硬盘上学会的。

l 首先要买一本入门的书,这本书应当基本包括了上述的必要内容。推荐《跨越Visual C++6.0》(四川科技出版社,¥42)

l 应当在机器中安装了帮助和VC例子。VC的帮助和例子浩如烟海,博大精深;任何参考书也取代不了连机帮助;它象一个大宝库等待你去挖掘。VC的例子里有许多可以重用的内容,各种极为有趣的应用。(比如Windows里的“写字板”和很多屏保的源代码)。作为提高,推荐看的例子有:

n Hello 最简单的程序框架

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

n Diblook 图像处理最简单范例

n MFCIE 因特网浏览器

n Enroll 数据库

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

n Cube OpenGL范例,画一个不断旋转的方块

n HierSvr OLE服务器

n Oclient OLE包容器

n Drawcli 鼠标绘图。 也包括OLE。

n WordPad 写字板。OLE


7、 几点经验

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

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


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

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

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

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

n

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

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

#include “windows.h”


void WinMain()

{

MessageBox(NULL,”Hello World!”,”My First Windows Application”,MB_OK);

}

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

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

void CYourView::OnDraw(CDC *pDC)

{

//…….其他的代码

pDC->TextOut(100,100,”Hello World!”);

}

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

毕业设计是最难得的机会。从现在到上班,还有3个月;对上研究生的同学还有5个月时间,用这么长的时间来专门学一个东西,机会并不多。本科4年我感到只有两件事特别有意义,一件是数学建模,另一件就是毕业设计。所以希望同学们抓住机遇。
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:56491次
    • 积分:867
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:28篇
    • 译文:0篇
    • 评论:11条
    最新评论