天天看點

vc入門

一、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成員可以協調工作,對軟體工程有利。

n

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尤其要和别人交流,你苦苦思考不明白的,也許别人早就解決了。一定要善于學習:從書店找出有用的書;向身邊的高手學習;尋找可以利用的源代碼、類庫、元件、控件、庫;如果能上互連網,那就更加能解決問題了。

上一篇: VC基礎知識
下一篇: MFC基礎知識

繼續閱讀