基于VC圖形處理軟件開發(fā)學(xué)士學(xué)位論文外文原文及翻譯_第1頁
基于VC圖形處理軟件開發(fā)學(xué)士學(xué)位論文外文原文及翻譯_第2頁
基于VC圖形處理軟件開發(fā)學(xué)士學(xué)位論文外文原文及翻譯_第3頁
基于VC圖形處理軟件開發(fā)學(xué)士學(xué)位論文外文原文及翻譯_第4頁
基于VC圖形處理軟件開發(fā)學(xué)士學(xué)位論文外文原文及翻譯_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、摘要 I摘要 #摘要在現(xiàn)代社會中,電腦被視為視覺藝術(shù)中越來越常用的工具。 原本依托于紙張 的信件和繪畫,依托于膠片的照相攝影及醫(yī)學(xué)檢查,它們均在慢慢向電子化與網(wǎng) 絡(luò)化發(fā)展。各種顯示設(shè)備已經(jīng)能夠滿足人們對于圖像幾乎所有的需求。因此,人們也需要能夠在顯示屏上像用紙和筆一樣進行繪畫。這篇論文針對這一需求,提出了使用VC+利用微軟公司的MFC類庫,在Windows平臺上制作一個簡易的、 輕量的、低學(xué)習(xí)成本的畫板程序的方法。關(guān)鍵詞:MFC,C+,圖形圖像編程,畫板程序ABSTRACT #ABSTRACT IIABSTRACTIn moder n society, computers are see n

2、as more and more com mon ly used in visual arts. Letters and paintings were originally based on paper, photography and medical check were orig in ally based on film, but now they are beco ming electr onic and n etworked.A variety of display devices have bee n able to meet peoples dema nd for almost

3、all images. Therefore, people also n eed to be able to paint on the scree n like using paper and pen. In resp onse to this dema nd, this paper prese nts a method of making a drawing board program with using Microsofts MFC class library in Visual C+, which is lightweight and low lear ning costs.Keywo

4、rds: MFC, VC+, Graphic image program ming, Drawi ng board program目錄iii目錄iii第-一章緒論11.1數(shù)字圖像的發(fā)展11.2繪圖軟件的發(fā)展現(xiàn)狀11.3編程語言簡介 21.4本文主要研究內(nèi)容3第二章編程基礎(chǔ)42.1編程原理42.1.1 C語言編程原理42.1.2面向?qū)ο缶幊?2.1.3類簡介52.1.4 MFC 簡介62.2程序創(chuàng)建原理72.2.1創(chuàng)建源代碼文件82.2.2編譯和鏈接92.3本章小結(jié)10 TOC o 1-5 h z HYPERLINK l bookmark34 o Current Document 第三章MFC程

5、序的實現(xiàn) 11 HYPERLINK l bookmark36 o Current Document 3.1創(chuàng)建MFC應(yīng)用程序框架 11 HYPERLINK l bookmark38 o Current Document 3.2控件11 HYPERLINK l bookmark40 o Current Document 3.2.1靜態(tài)控件13 HYPERLINK l bookmark42 o Current Document 3.2.2編輯框控件14按鈕16 HYPERLINK l bookmark58 o Current Document 3.2.4組合框20 HYPERLINK l book

6、mark76 o Current Document 3.3圖形圖像編程24 HYPERLINK l bookmark78 o Current Document 3.3.1 GDI坐標(biāo)系與映射模式 25 HYPERLINK l bookmark80 o Current Document 3.3.2顏色和顏色設(shè)置 26 HYPERLINK l bookmark82 o Current Document GDI 對象26 HYPERLINK l bookmark84 o Current Document 3.3.4畫筆工具27 HYPERLINK l bookmark86 o Current Doc

7、ument 3.3.5圖形繪制工具28 HYPERLINK l bookmark98 o Current Document 3.3.6畫刷工具29 HYPERLINK l bookmark110 o Current Document 3.4本章小結(jié)30目錄 #目錄 # HYPERLINK l bookmark114 o Current Document 第四章總結(jié)31致謝32 HYPERLINK l bookmark116 o Current Document 參考文獻33附錄34 HYPERLINK l bookmark120 o Current Document 外文文獻原文39 HYPE

8、RLINK l bookmark124 o Current Document 外文文獻譯文44第一章緒論 電子科技大學(xué)學(xué)士學(xué)位論文 第一章緒論1.1數(shù)字圖像的發(fā)展有證據(jù)表明,在書面溝通之前,繪畫是人類表達思想的最古老形式之一。大約3萬年前,在書面語言發(fā)明之前,繪畫就已經(jīng)作為智人專門的交流方式 出現(xiàn)在他們洞穴的壁畫及巖畫中 。那些圖形被稱為象形圖,描繪其所指對象的抽 象概念。史前時期的草圖和繪畫不斷的被風(fēng)格化和簡化,推動了書面語言的產(chǎn)生發(fā)展。繪畫在人類歷史上一直是公眾表達的流行和基本手段。它是傳達視覺想法 的最簡單和最有效的手段之一。繪畫是使用各種各樣的工具和技術(shù)制作圖像的手段。傳統(tǒng)的繪畫過程使

9、用鉛 筆、鋼筆、刷子、蠟筆、木炭和(或)粉彩。在數(shù)字化的繪圖軟件中,很多基礎(chǔ) 工具都對實物工具進行的模仿與改進,如直線工具、鉛筆工具、矩形和橢圓工具、 橡皮擦工具及字符輸入工具等。視覺藝術(shù)家已經(jīng)不再局限于傳統(tǒng)的藝術(shù)媒體。20世紀(jì)60年代以來,電腦被視為視覺藝術(shù)中越來越常用的工具。其用途包括捕獲或創(chuàng)建圖像,編輯以及最終的 渲染和打印。對于電腦的使用模糊了插畫師、攝影師、照片編輯、3D建模工作者和工藝品藝術(shù)家之間的區(qū)別。復(fù)雜的渲染和編輯軟件促成了多技能的圖像開發(fā)人 員的出現(xiàn)。藝術(shù)家等創(chuàng)作者更愿意使用個人電腦進行創(chuàng)作。因為使用繪圖軟件比傳統(tǒng)方 法需要較少的手眼協(xié)調(diào),較少的想象能力,同時利用計算機的自

10、動渲染功能可以 更高效的(有時更準(zhǔn)確的)來創(chuàng)建圖像。然而,隨著計算機計算能力的提升,繪 圖軟件的風(fēng)格、特效和編輯方法復(fù)雜多樣,可能需要比傳統(tǒng)繪畫更多的學(xué)習(xí)成本, 并且這一成本隨著對軟件掌握的程度直線上升。此時軟件是激發(fā)還是壓抑創(chuàng)造力 就取決于其界面的直觀性5。1.2繪圖軟件的發(fā)展現(xiàn)狀圖形從廣義上說,是能在人的視覺系統(tǒng)中形成視覺印象的客觀對象。計算機 圖形學(xué)由Ivan Sutherland于1962年提出,并于近些年來飛速發(fā)展。計算機圖形學(xué) 是計算機科學(xué)的重要分支。目前圖形的應(yīng)用軟件很多,例如Photoshop, AutoCAD等,但就開發(fā)圖形系統(tǒng)本身來說,仍需構(gòu)筑其底層平臺,以便研究新的算法,

11、擴 充新的功能,加快圖形處理速度,產(chǎn)生更加逼真的造型效果。Visual C+作為一種 通用的軟件開發(fā)工具,目前仍然是開發(fā)底層軟件不可或缺的平臺。本次研究正是 基于這些因素,利用MFC的基礎(chǔ)類庫開發(fā)一個基本繪圖環(huán)境,力求為圖形系統(tǒng)的 進一步開發(fā)研究提供一個良好的平臺5,6 o圖形是Windows應(yīng)用程序的重要組成部分,優(yōu)美的圖形界面是所有成功軟件 的共同特點。VC+是當(dāng)前最為流行的基于 Windows的開發(fā)工具之一,其功能的強 大,精通VC+是不少程序開發(fā)人員的努力方向。在 VC+中,每一項功能的實現(xiàn) 都有著嚴(yán)密的邏輯與算法,只有清楚功能背后的原理與方法,才能做到運用自如。 VC+的編程方式有兩

12、種,一種是直接使用 API函數(shù),另一種是使用 MFC類庫。 第一種方式是傳統(tǒng)的 Windows編程方式,保留傳統(tǒng)編程中面向過程的特征。第二 種方式下MFC把API函數(shù)封裝到各種類與對象內(nèi),是面向?qū)ο笈c Windows編程 的有機結(jié)合,真正體現(xiàn)出了 VC+編程的風(fēng)格。本文具體分析MFC方式下實現(xiàn)繪圖 功能的幾個關(guān)鍵問題,并給出具體實例。1.3編程語言簡介在過去的幾十年,計算機技術(shù)以令人驚訝的速度發(fā)展,編程工作也隨之發(fā)生 翻天覆地的變化,程序員不再需要將穿孔卡片提交給充斥整個房間的大型計算機 系統(tǒng),而這種系統(tǒng)可能只有100KB的內(nèi)存。計算機語言也得到了發(fā)展,盡管變化 可能沒有更大,但也是非常重要的

13、。體積更大、功能更強的計算機引出了更大、 更復(fù)雜的程序,而這些程序在程序管理和維護方面又帶來了新的問題。20世紀(jì)70年代,C和Pascal語言標(biāo)志著進入結(jié)構(gòu)化編程時代,同時 C語言還能生成簡潔、 快速運行的程序,并提供了處理硬件問題的能力。這些因素使C語言成為20世紀(jì)80年代占統(tǒng)治地位的編程語言。同時,20世紀(jì)80年代,人們也見證了一種新編 程模式的成長:面向?qū)ο缶幊?Object Orie nted Programmi ng, OOP)。20世紀(jì)70年代早期,貝爾實驗室的 Dennis Ritchie致力于開發(fā)UNIX操作系 統(tǒng)。完成這項工作需要一種語言,它必須能夠生成簡潔、快速的程序,并能

14、有效 地控制硬件。傳統(tǒng)上,程序員使用匯編語言來滿足這些需求,匯編語言依賴于計 算機的內(nèi)部機器語言。然而,匯編語言是低級語言,即直接操作硬件,如直接訪 問CPU寄存器和內(nèi)存單元,因此匯編語言針對于特定的計算機處理器。如果想將 匯編程序移植到另一種計算機上,必須使用不同的匯編語言重新編寫程序。然而 UNIX是為在不同的計算機或平臺上工作而設(shè)計的,這意味著需要一種高級語言。 高級語言致力于解決問題,同時不會專用于特定的硬件,編譯器則將高級語言翻 譯成特定計算機的內(nèi)部語言。這樣,就可以通過對于每個平臺使用不同的編譯器, 而實現(xiàn)不同平臺上使用同一個高級語言程序了。Ritchie希望有一種語言能將低級 語

15、言的效率、硬件訪問能力和高級語言的通用性、可移植性融合在一起,于是他 在舊語言的基礎(chǔ)上開發(fā)了 C語言?!?C+主要是為了我的朋友和我不必再使用匯編語言、C語言或其他現(xiàn)代高級 語言來編程而設(shè)計的。它的主要功能是可以更方便地編寫出好程序,讓每個程序 員更加快樂”。C+發(fā)明者Bjarne Stroustrup如此認(rèn)為。Stroustrup比較關(guān)心的是讓 C+更有用,而不是實施特定的編程原理或風(fēng)格。在確定C+語言特性方面,真正 的編程需要比純粹的原理更重要。C+是C語言的超集,這意味著任何有效的 C 程序都是有效的C+程序。它們之間有些細微的差異,但C+程序仍可以使用已有的C軟件庫。庫是編程模塊的集合

16、,可以從程序中調(diào)用它們。庫對很多常見的 編程問題提供了可靠的解決方法,因此能節(jié)省程序員大量的時間和工作量。這也 有助于C+的廣泛傳播。名稱C+來自C語言中的遞增運算符+,該運算符將變 量加1。名稱C+表明,它是C的擴充版本。1.4本文主要研究內(nèi)容本文主要研究在Visual Studio平臺下使用VC+的MFC基礎(chǔ)類庫實現(xiàn)一個畫 板程序的基本功能,其功能包含有:鉛筆工具,可自定義繪制的線形與粗細;直線工具,可自定義繪制的線形與粗細;矩形、圓角矩形與橢圓工具,可自定義所繪圖形的填充物。以XY軸坐標(biāo)方式定位光標(biāo)位置,方便精細操作;支持以jpg、bmp等格式保存文件。其中,繪圖工具均支持選擇黑色、藍色

17、、綠色、紅色、白色或自定義顏色。第二章編程基礎(chǔ) 電子科技大學(xué)學(xué)士學(xué)位論文 第二章編程基礎(chǔ)2.1編程原理C+融合了 3種不同的編程方式:以C語言代表的過程性語言;C+在C語言 基礎(chǔ)上添加的類代表的面向?qū)ο笳Z言;C+模板支持的泛型編程。編程技術(shù)人員使 用C+的原因之一就是為了利用其面向?qū)ο蟮奶匦浴6眠@種特性,就需要 對標(biāo)準(zhǔn)C語言知識有較深入的了解,因為 C+與C語言存在一些共有特征:C語 言提供了基本類型、運算符、控制結(jié)構(gòu)和語法規(guī)則。但這并不僅僅是學(xué)習(xí)更多的 關(guān)鍵字和結(jié)構(gòu)。初學(xué)者在掌握了 C之后學(xué)習(xí)C+,其學(xué)習(xí)量與從頭學(xué)習(xí)C語言一 樣大。另外,如果不了解 C語言,則學(xué)習(xí)C+時需要掌握C語言知

18、識、面向?qū)ο?編程知識以及泛型編程知識。2.1.1 C語言編程原理由于C+在C語言的基礎(chǔ)上移植了新的編程理念,因此我們首先來看一看C所遵循的舊的理念。一般來說,計算機語言要處理兩個概念一一數(shù)據(jù)和算法。數(shù)據(jù)是程序使用和處理的信息,而算法是程序使用的方法。C語言與當(dāng)前主流的語言 一樣,在最初面世時也是過程性語言,這意味著它強調(diào)的是編程的算法方面。從 概念上說,過程化編程首先要確定計算機應(yīng)采取的操作,然后使用編程語言來實 現(xiàn)這些操作。隨著程序規(guī)模的擴大,早期的程序語言都會遇到組織方面的問題。例如,程 序經(jīng)常使用分支語句,根據(jù)某種測試的結(jié)果,執(zhí)行一組或另一組指令。很多舊式 程序的執(zhí)行路徑很混亂,幾乎不

19、可能通過閱讀程序來理解它,修改這種程序簡直 是一場災(zāi)難。為了解決這種問題,計算機科學(xué)家開發(fā)了一種更有序的編程方法 ?結(jié)構(gòu)化編程。C語言具有使用這種方法的特性。例如,結(jié)構(gòu)化編程可以將分 支限制為一小組行為良好的結(jié)構(gòu)。C語言的詞匯表中就包含了這些結(jié)構(gòu) (for循環(huán)、 while循環(huán)、do while循環(huán)和if else語句)。另一個新原則是自上向下的設(shè)計。在 C語言中,其理念是將大型程序分解成 小型、便于管理的任務(wù)。如果其中的一項任務(wù)仍然過大,則將它分解為更小的任 務(wù)。迭代這一過程,直到將程序劃分為小型的、易于編寫的模塊。C語言的設(shè)計有助于使用這種方法,它鼓勵程序員開發(fā)程序單元(函數(shù))來表示各個任

20、務(wù)模塊。 如上所述,結(jié)構(gòu)化編程技術(shù)反映了過程性編程的思想,根據(jù)執(zhí)行的操作來構(gòu)思一 個程序。2.1.2面向?qū)ο缶幊屉m然結(jié)構(gòu)化編程的理念提高了程序的清晰度、可靠性,并使之便于維護,但 它在編寫大型程序時,仍面臨著挑戰(zhàn)。為應(yīng)付這種挑戰(zhàn),面向?qū)ο缶幊烫峁┝艘?種新方法。與強調(diào)算法的過程性編程不同的是,面向?qū)ο缶幊虖娬{(diào)的是數(shù)據(jù)。面 向?qū)ο缶幊滩幌襁^程性編程那樣,試圖使問題滿足語言的過程性方法,而是試圖 讓語言來滿足問題的要求。其理念是設(shè)計與問題的本質(zhì)特性相對應(yīng)的數(shù)據(jù)格式。在C+中,類是一種規(guī)范,這種新型數(shù)據(jù)格式,其對象是根據(jù)這種規(guī)范構(gòu)造 的特定數(shù)據(jù)結(jié)構(gòu)。例如,類可以描述公司管理人員的基本特征(姓名、頭銜

21、、工 資、特長等),而對象則代表特定的管理人員。通常,類規(guī)定了可使用哪些數(shù)據(jù)來 表示對象以及可以對這些數(shù)據(jù)執(zhí)行哪些操作。如本例,開發(fā)一個能夠繪制矩形的 計算機繪圖程序,則可以定義一個描述矩形的類。定義的數(shù)據(jù)部分包括頂點的位 置、長和寬、四條邊的樣式、矩形內(nèi)部的填充顏色和圖案等;定義的操作部分可 以包括移動、改變大小、改變顏色和圖案等操作。這樣,當(dāng)使用該程序來繪制矩 形時,它將根據(jù)類定義創(chuàng)建一個對象。該對象保存了描述矩形的所有數(shù)據(jù)值,因 此可以使用類方法來修改該矩形。如果繪制兩個矩形,程序?qū)?chuàng)建兩個對象,每 個矩形對應(yīng)一個。面向?qū)ο缶幊坛绦蛟O(shè)計方法首先設(shè)計類,它們準(zhǔn)確地表示了程序要處理的東 西。

22、例如,繪圖程序可能定義表示矩形、直線、圓、畫筆的類。類定義描述了對 每個類可執(zhí)行的操作,然后便可以設(shè)計一個使用這些類的對象的程序。從低級組 織(如類)至V高級組織(如程序)的處理過程叫做自下向上的編程。面向?qū)ο缶?程不僅僅是將數(shù)據(jù)和方法合并為類定義,面向?qū)ο缶幊踢€有助于創(chuàng)建可重用的代 碼,這將減少大量的工作。信息隱藏可以保護數(shù)據(jù),使其免遭不適當(dāng)?shù)脑L問;多 態(tài)能夠為運算符和函數(shù)創(chuàng)建多個定義,同時通過編程上下文能確定使用哪個定義; 繼承能夠使用舊類派生出新類。面向?qū)ο缶幊桃肓撕芏嘈碌睦砟?,使用的編程方法不同于過程性編程。它 的重點不是放在任務(wù)上,而是放在表示概念上。設(shè)計有用、可靠的類是一項艱巨

23、的任務(wù),幸運的是,面向?qū)ο缶幊陶Z言使程序員在編程中能夠輕松地使用已有的 類。廠商提供了大量有用的類庫,包括設(shè)計用于簡化 Windows環(huán)境下編程的類庫, 如本次研究中使用了 Microsoft設(shè)計的MFC類庫。2.1.3類簡介類是C+中一種重要的格式,其理論支撐是面向?qū)ο缶幊?。類?guī)范由兩個部 分組成。類聲明:以數(shù)據(jù)成員的方式描述數(shù)據(jù)部分,以成員函數(shù)的方式描述公有 接口;類方法定義:描述如何實現(xiàn)類成員函數(shù)。簡單地說,類聲明提供了類的藍 圖,而方法定義則提供了細節(jié)。面向?qū)ο缶幊淌且环N編程風(fēng)格,這種風(fēng)格主要存在于C+的編程中。類定義了一種抽象類型,它將存儲格式和函數(shù)原型置于頭文件中,對函數(shù)的使用者隱

24、藏 了實際的數(shù)據(jù)表示。C+包括了許多專門用來實現(xiàn)面向?qū)ο缶幊谭椒ǖ奶匦浴J紫?,將?shù)據(jù)表示和函數(shù)原型放在一個類聲明而不是放在一個文件中,通過將所有內(nèi)容 放在一個類聲明中,來使描述成為一個整體。其次,讓數(shù)據(jù)表示成為私有,使得 數(shù)據(jù)只能被授權(quán)的函數(shù)訪問。在 C語言中、如果main ()直接訪問了結(jié)構(gòu)成員, 就違反了面向?qū)ο缶幊痰木?、但沒有違反c語言的規(guī)則。如果試圖直接訪問私有數(shù)據(jù),編譯器將捕獲這種錯誤。數(shù)據(jù)隱藏不僅可以防止直接訪問數(shù)據(jù),還讓程序開發(fā)者無需了解數(shù)據(jù)是如何 被表示的。從他們的角度看,數(shù)據(jù)隱藏與否沒有什么區(qū)別,所需要知道的只是各 種成員函數(shù)的功能;也就是說,需要知道成員函數(shù)接受什么樣的參

25、數(shù)以及返回什 么類型的值。另外,如果以后找到了更好的實現(xiàn)數(shù)據(jù)表示或成員函數(shù)的方法,可 以針對這些進行修改,而無須修改程序接口,這使程序維護起來更容易。無論類成員是數(shù)據(jù)成員還是成員函數(shù),都可以在類的公有部分或私有部分中 聲明它。但由于隱藏數(shù)據(jù)是OOP主要的目標(biāo)之一,因此數(shù)據(jù)項通常放在私有部分, 組成類接口的成員函數(shù)放在公有部分;否則就無法從程序中調(diào)用這些函數(shù)。通常, 程序員使用私有成員函數(shù)來處理不屬于公有接口的實現(xiàn)細節(jié)。除了 public和private兩個關(guān)鍵字可以控制對類成員的訪問外,還存在另一個 訪問類別,這種類別用關(guān)鍵字 protected表示。關(guān)鍵字protected與private相

26、似,在 類外只能用公有類成員來訪問 protected部分中的類成員。private和protected之間 的區(qū)別只有在基類派生的類中才會表現(xiàn)出來。派生類的成員可以直接訪問基類的 保護成員,但不能直接訪問基類的私有成員。因此,對于外部世界來說,保護成 員的行為和私有成員相似;但對于派生類來說,保護成員的行為與公有成員相似。2.1.4 MFC 簡介Visual Studio作為Windows平臺最早發(fā)布并發(fā)展沿用至今的開發(fā)工具集,其 功能的完全性、多樣性是大部分編程軟件無法比擬的。它包括了整個軟件生命周 期中所需要的大部分工具,如 UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE) 等等。使用其

27、所寫的目標(biāo)代碼適用于微軟支持的所有平臺。MFC即微軟基礎(chǔ)類(Microsoft Foundation Classed,由微軟提供,用于在C+ 語言下編寫應(yīng)用程序。VC+是Win DOS下開發(fā)人員使用的專業(yè) C+ SDK,MFC 則是掛載在VC+下的輔助軟件開發(fā)包。MFC是Win API與C+的結(jié)合,API即微軟提供的 Win DOS下應(yīng)用程序的編 程語言接口,是軟件編程的規(guī)范,但不是程序開發(fā)語言本身。它可以允許用戶使 用各種各樣的第三方的編程語言來進行對 Win DOS下應(yīng)用程序進行開發(fā),使這些 被開發(fā)出來的應(yīng)用程序能在 Win DOS下運行,比如 VB,VC+,Java,它們的編 程語言函數(shù)

28、本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在WinOS的消息機制和繪圖里,遵守 Win DOS的內(nèi)部實現(xiàn)。MFC作為微軟對API 函數(shù)的專用C+封裝,這種結(jié)合讓用戶使用微軟的專業(yè) C+ SDK來進行Win下應(yīng) 用程序的開發(fā)變得容易,程序開發(fā)人員在Windows下用MFC編制軟件時的大量內(nèi) 節(jié)被隱藏,例如應(yīng)用程序?qū)崿F(xiàn)消息處理,設(shè)備環(huán)境繪圖等。這種結(jié)合是以方便為 目的的,勢必要付出一定代價,因此就造成了 MFC對類封裝中的一定程度的冗余 和迂回,這種代價是可以接受的。最后,MFC不只是一個功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分被用 來進行界面開發(fā),關(guān)聯(lián)一個窗口的動作。但它提供的

29、類中有很多不與一個窗口關(guān) 聯(lián)。對于這部分類,它們不是一個界面類,不實現(xiàn)對一個窗口對象的控制(如創(chuàng) 建,銷毀),而是一些在 Win DOS (用MFC編寫的程序絕大部分都在 Win DOS中 運行)中實現(xiàn)內(nèi)部處理的類,如數(shù)據(jù)庫的管理類等 9-11。MFC是微軟封裝了的API。Windows是功能強大的應(yīng)用程序接口編程的操作 系統(tǒng),方便了許多程序員。傳統(tǒng)的 win32開發(fā),即直接使用 Windows的接口函數(shù) API對于程序員來說非常的困難,因為 API函數(shù)很多,內(nèi)容雜亂,從零構(gòu)架一個 窗口動輒就是上百行的代碼。 MFC是面向?qū)ο蟪绦蛟O(shè)計與 application framework 的完美結(jié)合,

30、它將傳統(tǒng)的API進行了分類封裝,并且創(chuàng)建了程序的一般框架。2.2程序創(chuàng)建原理編寫一個C+程序,其最終目的就是讓它能夠運行,具體的步驟取決于計算 機環(huán)境和使用的C+編譯器,但大體如下(如圖2-1所示):使用文本編輯器編寫程序,并將其保存到文件中,這個文件就是程序的源 代碼。編譯源代碼。這意味著運行一個程序,將源代碼翻譯為主機使用的內(nèi)部語 言一一機器語言。包含了翻譯后的程序的文件就是程序的目標(biāo)代碼。將目標(biāo)代碼與其他代碼鏈接起來。例如,C+程序通常使用庫。C+庫包含一系列計算機例程(被稱為函數(shù))的目標(biāo)代碼,這些函數(shù)可以執(zhí)行諸如在屏幕上 顯示信息或計算平方根等任務(wù)。鏈接指的是將目標(biāo)代碼同使用的函數(shù)的目

31、標(biāo)代碼 以及一些標(biāo)準(zhǔn)的啟動代碼組合起來,生成程序的運行階段版本。包含該最終產(chǎn)品 的文件被稱為可執(zhí)行代碼。要創(chuàng)建C+程序,可創(chuàng)建一個或多個源代碼文件,其中包含了以C+語言表示的程序。這些文件是文本文件,它們經(jīng)過編譯和鏈接后將得到機器語言文件, 后者構(gòu)成了可執(zhí)行的程序。上述任務(wù)通常是在IDE中完成的,IDE提供了用于創(chuàng)建源代碼文件的文本編輯器、用于生成可執(zhí)行文件的編譯器和鏈接器以及其他資 源,如項目管理和調(diào)試功能。這些任務(wù)也可以在命令行環(huán)境中通過調(diào)用合適的工 具來完成12。2.2.1創(chuàng)建源代碼文件本節(jié)討論創(chuàng)建源代碼文件的技巧。有些C+實現(xiàn)提供了集成開發(fā)環(huán)境(Integrated Developme

32、nt Environmen,縮寫為IDE),能夠讓程序員在主程序中管 理程序開發(fā)的所有步驟,包括編輯。有些實現(xiàn)只能處理編譯和鏈接階段,要求在 系統(tǒng)命令行輸入命令。在這種情況下,可以使用任何文本編輯器來創(chuàng)建和修改源 代碼。如果將文件保存為標(biāo)準(zhǔn) ASCII文本文件,甚至可以使用字處理器。另外, 還可能有IDE選項,讓用戶能夠使用這些命令行編譯器。給源文件命名時,必須 使用正確的后綴,將文件標(biāo)識為 C+文件。這將告知編譯器該文件是 C+源代碼。后綴的字符被稱作擴展名。對于本例,Windows系統(tǒng)的Visual Studio而言,C+文件的擴展名通常為cpp, cxx與cc。2.2.2編譯和鏈接最初實

33、現(xiàn)C+時,是使用C+到C的編譯器程序,而不是開發(fā)直接的 C+到 目標(biāo)代碼的編譯器。這種方法簡化了向 C的領(lǐng)域引入C+的過程。隨著C+的日 漸普及,越來越多的實現(xiàn)轉(zhuǎn)向創(chuàng)建 C+編譯器,直接將C+源代碼生成目標(biāo)代碼。 這種直接方法加速了編譯過程,并強調(diào)C+是一種獨立的語言。編譯的機理取決于如何實現(xiàn)。對于 Windows系統(tǒng),實現(xiàn)方法一般有Windows命令行編譯器及Windows編譯器程序。對于其他系統(tǒng)實現(xiàn)的方法,在此不作贅述。Win dows命令行編譯器要在Windows PC上編譯C+程序,最便宜的方法是下載一個在 Windows命 令提示符模式下運行的命令行編譯器。Cygwin和MinGW都

34、包含編譯器GNUC+, 它們使用的編譯器名為g+0要使用g+編譯器,首先需要打開一個命令提示符窗 口。啟動程序Cygwin和MinGW時,它們將自動打開一個命令提示符窗口。要編 譯名為great.cpp的源代碼文件,可以在提示符下輸入命令:g+ great.cpp如果程序編譯成功,則可得到名為 a.exe的可執(zhí)行文件。Win dows編譯器Windows編譯器產(chǎn)品很多且修訂頻繁,無法對它們分別進行介紹。雖然設(shè)計 和目標(biāo)不同,但大多數(shù)基于 Windows的C+編譯器都有一些相同的功能。通常,必須為程序創(chuàng)建一個項目,并將組成程序的一個或多個文件添加到該 項目中。所有廠商提供的集成開發(fā)環(huán)境(IDE

35、)都包含用于創(chuàng)建項目的菜單選項。 必須確定的非常重要的一點是,需要創(chuàng)建的是什么類型的程序。通常,編譯器提 供了很多選擇,如 Windows應(yīng)用程序、MFC Windows應(yīng)用程序、動態(tài)鏈接庫、 ActiveX控件、DOS或字符模式的可執(zhí)行文件、靜態(tài)庫或控制臺應(yīng)用程序等。創(chuàng)建 好項目后,需要對程序進行編譯和鏈接。IDE通常提供了多個菜單項,如 Compile (編譯)、Build (建立)、Make (生 成)、Build All (全部建立)、Link (鏈接)、Execute (執(zhí)行)、Run (運行)和 Debug (調(diào)試),不過同一個IDE中不一定包含所有這些選項。Compile通常意味

36、著對當(dāng) 前打開的文件中的代碼進行編譯。Build和Make通常意味著編譯項目中所有源代 碼文件的代碼。這通常是一個遞增過程,也就是說,如果項目包含3個文件,而只有其中一個文件被修改,則只重新編譯該文件。Build All通常意味著重新編譯所有的源代碼文件。Link意味著將編譯后的源代碼與所需的庫代碼組合起來。Run或Execute意味著運行程序。通常,如果還沒有執(zhí)行前面的步驟,Run將在運行程序之前完成這些步驟。Debug意味著以步進方式執(zhí)行程序。編譯器可能讓您選擇要 生成調(diào)試版還是發(fā)布版。調(diào)試版包含額外的代碼,這會增大程序、降低執(zhí)行速度, 但可提供詳細的調(diào)試信息。如果程序違反了語言規(guī)則,編譯

37、器將生成錯誤消息, 指出存在問題的行。遺憾的是,不熟悉語言將會難以理解這些消息。有時,真正的問題可能在標(biāo) 識行之前;有時,一個錯誤可能引發(fā)一連串的錯誤消息。改正錯誤時,應(yīng)首先改 正第一個錯誤。如果在標(biāo)識為有錯誤的那一行上找不到錯誤,則需要查看前一行。程序能夠通過某個編譯器的編譯并不意味著它是合法的C+程序;同樣,程序不能通過某個編譯器的編譯也并不意味著它是非法的C+程序。編譯器通常提供了可用于控制嚴(yán)格程度的選項。有時,編譯器在不完全地構(gòu)建程序后將出現(xiàn)混亂,顯示無法改正的、無意義 的錯誤消息。在這種情況下,可以選擇Build All,重新編譯整個程序,以清除這些錯誤消息。更加遺憾的是,這種情況和

38、更常見的情況一一即錯誤消息只是看上去無意義而實際上有意義,是很難做出區(qū)分的。通常,IDE允許在輔助窗口中運行 程序。若需要查看輸出,必須在程序的最后加上一些代碼:ci n.get();ci n.get();return 0;其中cin.get()語句的作用是讀取下一次鍵擊,因此上述語句讓程序等待,直到 按下了 Enter鍵。在按下Enter鍵之前,鍵擊將不被發(fā)送給程序,因此按其他鍵都 是無效的。如果程序在其常規(guī)輸入后留下一個沒有被處理的鍵擊,則第二條語句 是必需的。例如,如果要輸入一個數(shù)字,則需要輸入該數(shù)字,然后按En ter鍵。程序?qū)⒆x取該數(shù)字,但Enter鍵不被處理,這樣它將被第一個 ci

39、n.get()讀取13。2.3本章小結(jié)本章主要介紹使用Visual Studio進行VC+編程的原理與概念,介紹了Windows平臺上主要的編程環(huán)境 Visual Studio的基本使用方法,介紹了編寫一個 后綴為exe的可執(zhí)行文件的基本原理與步驟。第三章MFC程序的實現(xiàn) 電子科技大學(xué)學(xué)士學(xué)位論文 第三章MFC程序的實現(xiàn)3.1創(chuàng)建MFC應(yīng)用程序框架創(chuàng)建一個應(yīng)用程序,首先要創(chuàng)建一個工程項目,利用項目管理程序中的所有 元素,進而編譯、生成應(yīng)用程序。MFC App Wizard是一個創(chuàng)建基于微軟基礎(chǔ)類庫MFC的Windows應(yīng)用程序的向?qū)?,是Visual Studio常用的向?qū)Чぞ?。?dāng)利用MFC A

40、pp Wizard創(chuàng)建一個項目時,可以自動生成 MFC的應(yīng)用程序框架。MFC將每個 應(yīng)用程序共同需要使用的代碼封裝起來,完成默認(rèn)的程序初始化功能,建立應(yīng)用 程序界面和基本的 Windows消息,避免重復(fù)工作14。Visual Studio中MFC框架的創(chuàng)建方法:選擇文件一一新建一一項目,在Visual C+模板中選擇MFC應(yīng)用程序,單 擊確定,打開MFC應(yīng)用程序向?qū)?。同時根據(jù)畫板程序的特性,對以下的選項進行 選擇。在應(yīng)用程序類型中選擇“單個文檔”,即一次只允許在程序中打開一個文件。在MFC的使用中,如果選擇“在共享 DLL中使用MFC”,則表示代碼在 生成與調(diào)試時不會將頭文件中的#inelud

41、e文件包含于得到的exe文件內(nèi),此時運行 該應(yīng)用程序會調(diào)用計算機系統(tǒng)中的數(shù)據(jù)庫文件。若系統(tǒng)缺失對應(yīng)文件將導(dǎo)致程序無法啟動。對于較輕量的程序,這樣做可以大幅減少軟件體積。如果選擇“在靜 態(tài)庫中使用MFC”則與之相反,優(yōu)點是能保證軟件的正常運行,但會增大程序的 體積。在數(shù)據(jù)庫支持中選擇“無”。其他選項使用默認(rèn)設(shè)置即可。之后根據(jù)需要,可使用類向?qū)У裙ぞ咛砑有枰?的類及類成員函數(shù)15。3.2控件在Windows應(yīng)用中,對話框和控件是密不可分的??丶钶d與對話框上,對 話框通過這些控件與用戶進行交互。Windows提供的控件有兩類,分別是標(biāo)準(zhǔn)控件和公共控件,說明如下。標(biāo)準(zhǔn)控件包括靜態(tài)庫、編輯框、按鈕、列

42、表框、組合框和滾動條等。利用標(biāo)準(zhǔn)控件可 以滿足大部分用戶界面程序設(shè)計的基本要求,如編輯框用于輸入數(shù)據(jù),復(fù)選框用于選擇不同選項,列表框用于選擇要輸入的信息。公共控件如滑塊、進度條、標(biāo)簽控件和樹狀圖控件等,以實現(xiàn)應(yīng)用程序用戶界面風(fēng)格 的多樣性。因為畫板軟件不需要公共控件擴展功能,可以僅使用標(biāo)準(zhǔn)控件完成,故下文 只介紹標(biāo)準(zhǔn)控件的實現(xiàn)。Windows系統(tǒng)標(biāo)準(zhǔn)控件的創(chuàng)建分為靜態(tài)創(chuàng)建和動態(tài)創(chuàng)建兩種,說明如下15。靜態(tài)創(chuàng)建它是指在對話框模板中創(chuàng)建控件并設(shè)置控件屬性。在調(diào)用對話框時,窗口會 自動按照預(yù)先的設(shè)置為對話框創(chuàng)建控件,而且程序員可以使用類向?qū)lassWizard為該控件在對話框類中創(chuàng)建一個控件類對象

43、。動態(tài)創(chuàng)建它是指在程序運行中根據(jù)需要,定義一個控件類的對象,再通過窗口函數(shù) CreateWindow()或者 CreateWindowEx()創(chuàng)建控件,調(diào)用函數(shù) ShowWindow()顯示控 件,正如操作一個子窗口一樣。每個控件都有一個屬性表,對于靜態(tài)創(chuàng)建的控件來說,可以在對話框模板中 打開控件的屬性對話框,并直接設(shè)置控件的初始屬性。在設(shè)計程序的過程中,可 以通過控件類對象調(diào)用方法設(shè)置控件的屬性。在Windows標(biāo)準(zhǔn)控件中,除了靜態(tài)控件通常不發(fā)送消息外,其他控件對于用 戶的操作都能發(fā)送消息,且不同種類的控件發(fā)送的消息不同。可以使用類向?qū)?ClassWizard為控件映射各種消息處理函數(shù)。在程

44、序的運行過程中,可以通過函數(shù) UpdateDataQ主動控制數(shù)據(jù)在控件顯示和成員變量之間的數(shù)據(jù)交換,同時MFC保留了 Windows API函數(shù)用于直接對控件ID操作控件,獲取或者設(shè)置控件的顯示值, 例如函數(shù)SetDlgltemText()和SetDlgltemText()用于設(shè)置或獲取編輯框中的文本。Windows應(yīng)用程序?qū)丶牟僮鲗嵸|(zhì)上是對窗口的操作,對話框窗口中的控 件被視為對話框窗口的子窗口,具有通用窗口的屬性,所以控件的操作還可以通 過對一組窗口操作函數(shù)來完成。常用的控件子窗口的操作函數(shù)如下。CreateWindow()或CreateWindowEx(),在程序運行過程中,可以通過

45、創(chuàng)建窗口 的函數(shù)來動態(tài)創(chuàng)建控件。ShowWindow(),顯示或者隱藏控件。En ableWi ndow(),激活控件或者禁止控件接受用戶的輸入。MoveWindow(),移動控件或者改變控件的大小。DestroyWindow(),關(guān)閉一個控件。321靜態(tài)控件靜態(tài)控件包括靜態(tài)文本和圖片控件。其中靜態(tài)文本控件用來顯示正文,而圖 片控件可以顯示位圖、圖標(biāo)、方框和圖元文件。在圖片控件中顯示圖片的好處是不必?fù)?dān)心圖片的重繪問題。靜態(tài)控件不能接受用戶的輸入,主要起到說明和裝飾的作用。在MFC應(yīng)用中,類CStatic封裝了靜態(tài)空間。類CStatic的成員函數(shù)Create() 負(fù)責(zé)創(chuàng)建靜態(tài)控件。該函數(shù)的格式聲

46、明如下。BOOL Create (LPCTSTR IpszText, DWORD dwStyle, const RECT&rect, CWnd* pPare ntWnd, UNIT nlD=Oxffff );lpszText指定了控件顯示的文本。dwStyle制訂了靜態(tài)控件的類型,在表 3-1 中列出了靜態(tài)控件的各種類型。rect是一個對RECT或CRect結(jié)構(gòu)的引用,用來說 明控件的位置和尺寸。pPare ntWnd指向父窗口,該參數(shù)不能為 NULL。nID說明 了空間ID,如果創(chuàng)建成功該函數(shù)返回 TRUE,否則返回FALSE。表3-1靜態(tài)控件的類型控件類型用 途SS BLACKFRAME指

47、定一個與窗口邊界同色的框(默認(rèn)黑色)SS BLACKRECT指定一個與窗口邊界同色的實心矩形(默認(rèn)黑色)SS CENTER使顯示的文本居中對齊,文本可以回繞SS GRAYFRAME指疋一個與屏幕冃景冋色的邊框SS GRAYRECT指定一個與屏幕背景冋色的實矩形SS_ICON使空間顯示一個在資源中定義的圖標(biāo),圖標(biāo)的名字由Create()函數(shù)lpszText的參數(shù)指定SS LEFT左對齊文本,文本可以回繞SS LEFTNOWORDWRAP左對齊文本,文本不能回繞SS NOPREFIX使靜態(tài)文本串中的&不是熱鍵提示符SS NOTIFY使控件能向父窗口發(fā)送鼠標(biāo)事件消息SS RIGHT右對齊文本,文本可

48、以回繞SS SINPLE使靜態(tài)文本在運行時不能被改變且文本單行顯示SS USERITEM指定一個用戶定義項SS WHITEFRAME指定一個與窗口背景同色的框(默認(rèn)白色)SS WHITERECT指定一個與窗口背景同色的實心矩形(默認(rèn)白色)除了表3-1所示的窗口類型外,一般還要為控件指定 WS_CHILD和WS_VISIBLE 窗口類型。類CStatic主要的成員函數(shù)如表 3-2所示??梢岳妙?CWnd的成員函數(shù)GetWindowText, SetWindowText 和 GetWindowTextLength 等來查詢和設(shè)置靜態(tài)控 件中顯示的文本。表3-2 CStatic類的主要成員函數(shù)函數(shù)

49、聲明用途HBITMAP SetBitmap (HBITMAP hBitmap);指定要顯示的位圖HBITMAP GetBitmap () con st;獲取由SetBitmap指定的位圖HICON SetIco n (HICON hIco n);指定要顯示的圖標(biāo)HICON GetIco n () con st;獲取由SetIcon指定的圖標(biāo)HCURSOR SetCursor (HCURSOR hCursor);指定要顯示的光標(biāo)圖片HCURSOR GetCursor ();獲取由SetCursor指定的光標(biāo)圖片HENHMETAFILE SetE nhMetaFile(HENHMETAFILE h

50、MetaFile);指定要顯示的增強圖兀文件HENHMETAFILE GetE nhMetaFile () con st;獲取由SetEnhMetaFile指定的圖兀文件3.2.2編輯框控件編輯框控件實際上是一個簡易的文本編輯器,用戶可以在編輯框中輸入并編 輯文本。編輯框既可以是單行的,也可以是多行的。多行編輯框是從零行開始進 行行編號的。在一個多行編輯框中,除了最后一行外,每一行的結(jié)尾處都有一對 回車換行符(rn),這對回車換行符是正文換行的標(biāo)志,屏幕上是不可見的。編輯 框控件會向父窗口發(fā)出如表3-3所示的控件通知消息。表3-3編輯框控件通知消息消 息含 義EN_CHAGE編輯框的內(nèi)容被用戶

51、改變了。與的正文被刷新后發(fā)出EN UPDA TE不同,該消息在編輯框顯示EN ERRSPACE編輯框控件無法申請足夠的動態(tài)內(nèi)存來滿足需要EN HSCROLL用戶在水平滾動條上單擊EN KILLFOCUS編輯框失去輸入焦點EN SETFOCUS編輯框獲得輸入焦點EN_MAXTEXT輸入的字符超過了規(guī)定的最大字符數(shù)。在沒有ES_AUTOHSCROLL 或ES_AUTOVSCROLL的編輯框中,當(dāng)正文超出了編輯框的邊框時也會發(fā)出 該消息EN UPDATE在編輯框準(zhǔn)備顯示改變了的正文時發(fā)送該消息EN VSCROLL用戶在垂直滾動條上單擊MFC中的類CEdit封裝了編輯框控件。類 CEdit的成員函數(shù)C

52、reate負(fù)責(zé)創(chuàng)建 按鈕控件。該函數(shù)的格式聲明如下。BOOL Create ( DWORD dwStyle, const RECT & rect, CWnd* pPare ntWnd, UNIT nID);其中dwStyle指定了編輯框控件的類型,具體的信息如表 3-4所示。dwStyle 可以是某些類型的組合。rect指定了編輯框的位置和尺寸。pParentWnd指定了父 窗口,此項不能為NULL。nID指定編輯框的ID,如果創(chuàng)建成功,該項返回TRUE, 否則返回FALSE。表3-4編輯框控件的類型控件類型含義ES_AUTOHSCROLL當(dāng)用戶在行尾鍵入一個字符時,文本將自動向右滾動10個字

53、符;當(dāng)用戶按Enter鍵時,文本總是滾向左邊ES_SUTOVSCROLL當(dāng)用戶在最后個可見行按Enter時,文本向上滾動一頁ES CENTER在多行編輯框中使文本居中ES LEFT左對齊文本ES LOWERCASE把用戶輸入的字母全部轉(zhuǎn)換成小寫字母ES UPPERCASE把用戶輸入的字母全部轉(zhuǎn)換成大寫字母ES MUTILINE指定一個多行編輯器。若多行編輯器不指定ES_AUTOHSCROLL類型,則會自動換行;若 不指定ES_AUTOVSCROLL 類型,則會在窗 口中文本裝滿時發(fā)出警告聲響ES_NOHIDESEL默認(rèn)時,當(dāng)編輯框失去輸入焦點后會隱藏所選的文本,當(dāng)獲得輸入焦點時又顯示出來。設(shè)置

54、該類型會禁止這種行為ES_OEMCONVERT使編輯框中的文本可以在ANSI字符集和OEM字符集之間相互轉(zhuǎn)換ES PASSWORD使所有鍵入的字符都用“ *”表示ES RIGHT右對齊正文ES READONL Y將編輯框設(shè)置為只讀ES_WANTRETURN使多行編輯器接受 Enter鍵輸入并換行,如果 不指定該風(fēng)格,按 Enter鍵會選擇默認(rèn)的命令 按鈕,這往往會關(guān)閉對話框除了上表中的風(fēng)格外,一般還要為控件指定WS_CHILD、WS_VISIBLE、WS_TABSTOP和 WS_BORDER窗口風(fēng)格。創(chuàng)建一個普通單行編輯框應(yīng)制定風(fēng)格 入下:WS_CHILD|WS_VISIBLE|WS_TABS

55、TOP|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL這將創(chuàng)建一個帶邊框、左對齊文本、可水平滾動的單行編輯器。323按鈕在VC+應(yīng)用中,按鈕用以激活事件,以完成某些特定的功能。按鈕控件的邏輯如圖3-1所示。圖3-1按鈕邏輯按鈕是指可以響應(yīng)鼠標(biāo)單擊的小矩形子窗口。按鈕控件包括命令按鈕、檢查框、單選按鈕、組框和自繪式按鈕。命令按鈕的作用是對用戶的單擊做出反應(yīng)并觸發(fā)相應(yīng)的事件,在按鈕中既可 以顯示正文,也可以顯示位圖。檢查框控件可以作為一種選擇標(biāo)記,可以有選中、 未選中和不確定三種狀態(tài)。單選按鈕控件一般都是成組出現(xiàn)的,具有互斥的性質(zhì), 即同組單選按鈕中只能有一個是被選中的。組框用來

56、將相關(guān)的一些控件聚成一組。選擇框和單選按鈕是一種特殊的按鈕,它們有選中和未選中的狀態(tài)。當(dāng)一個 選擇框處于選擇狀態(tài)時,在小方框內(nèi)會出現(xiàn)一個“V” ,當(dāng)單選按鈕處于選擇狀態(tài) 時,會在圓圈中顯示一個黑色實心圓點。此外。檢查框還有一種不確定狀態(tài),這 時檢查框表現(xiàn)為灰色不能接受用戶的輸入,用以表明控件是無效或無意義的。按鈕控件能夠向父窗口發(fā)出如下通知消息。表3-5按鈕控件的通知消息消 息含義BN CLICKED用戶在按鈕上單擊BN DOUBLECLLICKED用戶在按鈕上雙擊在MFC應(yīng)用中,類CButton封裝了按鈕控件。類CBotton的成員函數(shù)Create()負(fù)責(zé)創(chuàng)建按鈕控件,該函數(shù)的聲明格式如下:

57、BOOL Create (LPCTSTR IpszC apti on,DWORD dwStyle,const RECT & rect,CWnd* pPare ntWnd,UNIT nID);其中l(wèi)pszCaption指定按鈕顯示的文本。dwStyle指定按鈕的風(fēng)格,由表3-6列 出,風(fēng)格可以是多種的組合。rect說明了按鈕的位置和尺寸。pParentWnd指向父 窗口,該參數(shù)不能為NULL。nID為按鈕的ID,如果創(chuàng)建成功則返回TRUE,否則 返回FALSE。表3-6按鈕的風(fēng)格控件風(fēng)格含義BS CHECKBOX指定在矩形按鈕右側(cè)帶有標(biāo)題的選擇框BS AUTOCHECKBOX同BS CHECKB

58、OX,不過單擊時按鈕會自動反轉(zhuǎn)BS RADIOBUTTON指定一個單選按鈕,在圓按鈕的右側(cè)顯示文本BS AUTORADIOBUTTON同BS RADIOBUTTON ,不過單擊時按鈕會自動反轉(zhuǎn)BS_3STATE冋BS_CHECKBOX,不過控件有三種狀態(tài):選中、未選中和無 效BS_AUTO3STATE同BS 3STATE,不過單擊時按鈕會改變狀態(tài)BS_DEFPUSHBOTTON指定默認(rèn)的命令按鈕,這種按鈕周圍有一個黑框,用戶可以按Enter鍵快速選擇該按鈕BS GROUPBOX指定一個組框BS LEFTTEXT使控件的標(biāo)題顯示在按鈕的左邊BS OWNERDRAW指定一個自繪式按鈕BS PUSH

59、BOTTON指定一個命令按鈕除了表3-6中列出的風(fēng)格外,一般還要為控件指定 WS_CHILD、WS_VISIBLE和WS_TABSTOP風(fēng)格。對于用對話框模板編輯器創(chuàng)建的按鈕控件,可以在控件的 屬性對話框中指定表3-6中列出的風(fēng)格。在MFC應(yīng)用中,類CBotton的主要成員函數(shù)如下。UNIT GetState () const;該函數(shù)返回按鈕控件的各種狀態(tài),可以用下列值與函數(shù)的返回值相與,以獲 得各種信息。0 x0003用來獲取檢查框或單選按鈕的狀態(tài)。0表示未選中,1表示選中,2表 示不確定狀態(tài)(僅用于檢查框)。0 x0004用來判斷按鈕是否是咼亮度顯示的。非零意味著按鈕是咼亮顯示。當(dāng) 用戶單

60、擊了按鈕并按住鼠標(biāo)左鍵時,按鈕會呈高亮度顯示。0 x0008非零值表示按鈕擁有輸入焦點。void SetState (BOOL bHighlight);當(dāng)參數(shù)bHighlight值為TRUE時,該函數(shù)將按鈕設(shè)置為高亮度狀態(tài),否則去 除按鈕的高亮度狀態(tài)。int GetCheck () const;返回檢查框或單選按鈕的選擇狀態(tài)。返回值0表示按鈕未被選擇,1表示按鈕被選擇,2表示按鈕處于不確定狀態(tài)(僅用于檢查框)。void SetCheck (int nCheck );設(shè)置檢查框或單選按鈕的選擇狀態(tài)。參數(shù)nCheck值的含義與SetCheck返回值 相同。UNIT GetButt on Style

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論