當前位置:編程學習大全網 - 源碼下載 - 如何在vc++中用cdc繪圖

如何在vc++中用cdc繪圖

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

參考資料:

/3647789.html

  • 上一篇:edge為什麽不用IE內核
  • 下一篇:特定基金指標的源代碼
  • copyright 2024編程學習大全網