圖形編輯器VC++_課設(shè)說(shuō)明書.doc_第1頁(yè)
圖形編輯器VC++_課設(shè)說(shuō)明書.doc_第2頁(yè)
圖形編輯器VC++_課設(shè)說(shuō)明書.doc_第3頁(yè)
圖形編輯器VC++_課設(shè)說(shuō)明書.doc_第4頁(yè)
圖形編輯器VC++_課設(shè)說(shuō)明書.doc_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余25頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

唐山學(xué)院課程設(shè)計(jì)唐 山 學(xué) 院面向?qū)ο蟪绦蛟O(shè)計(jì)課 程 設(shè) 計(jì) 繪圖應(yīng)用程序設(shè)計(jì)題 目 07計(jì)對(duì)本系 (部) 計(jì)算機(jī)科學(xué)與技術(shù)系 李志飛班 級(jí) 4070207116姓 名 郭琳虹學(xué) 號(hào) 指導(dǎo)教師 2010 年 7 月 12 日至 7 月 16 日 共 1 周2010年 7 月 16 日面向?qū)ο蟪绦蛟O(shè)計(jì) 課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)題目、內(nèi)容及要求1、設(shè)計(jì)題目:繪圖應(yīng)用程序設(shè)計(jì)2、設(shè)計(jì)內(nèi)容及要求:利用MFC應(yīng)用程序、圖形處理的基本知識(shí),設(shè)計(jì)一個(gè)繪圖應(yīng)用程序。程序具有以下功能:圖形繪制功能:直線、橢圓、矩形、文本等;圖形修改功能:線條顏色、線條類型、填充顏色、填充方式的設(shè)置;數(shù)據(jù)保存功能:能夠把圖形數(shù)據(jù)保存到文件中。二、要求的設(shè)計(jì)成果(課程設(shè)計(jì)說(shuō)明書、設(shè)計(jì)實(shí)物、圖紙等)1、用Visual C+進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?、撰寫課程設(shè)計(jì)說(shuō)明書一份,不少于2000字。課程設(shè)計(jì)說(shuō)明書應(yīng)包括封面、任務(wù)書、正文(設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼解釋)、參考文獻(xiàn)(資料)、附錄(程序代碼)等內(nèi)容。三、進(jìn)程安排7月12日:完成需求分析,確定程序功能,確立程序設(shè)計(jì)思想;7月13日7月14日:進(jìn)行詳細(xì)設(shè)計(jì),實(shí)現(xiàn)編碼;7月15日:進(jìn)行程序測(cè)試,完善編碼;撰寫設(shè)計(jì)說(shuō)明書,準(zhǔn)備答辯;7月16日:答辯。四、主要參考資料1 王育堅(jiān)Visual C+面向?qū)ο缶幊探坛痰?版北京:清華大學(xué)出版社,20082 侯俊杰深入淺出MFC第2版廣東:南方出版社,20073 嚴(yán)華峰 等Visual C+課程設(shè)計(jì)案例精編北京:中國(guó)水利水電出版社,2004指導(dǎo)教師(簽名):教研室主任(簽名):注:可以附頁(yè)課程設(shè)計(jì)成績(jī)?cè)u(píng)定表出勤情況出勤天數(shù) 缺勤天數(shù)成績(jī)?cè)u(píng)定出勤情況及設(shè)計(jì)過(guò)程表現(xiàn)(20分)課設(shè)答辯(20分)設(shè)計(jì)成果(60分)總成績(jī)(100分)提問(wèn)(答辯)問(wèn)題情況綜合評(píng)定 指導(dǎo)教師簽名: 年 月 日唐山學(xué)院課程設(shè)計(jì)1 引言本程序使用Visual C+ 6.0 MFC1可視化開發(fā)環(huán)境。下面主要介紹在說(shuō)明書中使用最頻繁的、與圖形處理密切相關(guān)的組件及其屬性和方法。1.1 顏色在計(jì)算機(jī)圖形處理軟件中,通常顏色是根據(jù)紅、綠、藍(lán)三種顏色的飽和度來(lái)定義的,這種模型稱為RGB模型。任何顏色都是紅、綠、藍(lán)三種基本色的不同組合組成,因此每種顏色都可以用紅、綠、藍(lán)基本色來(lái)表示。Red、Green、Blue用來(lái)表示基本色構(gòu)成的三個(gè)分量,他們的取值為0-255,最小值表示沒(méi)有顏色,最大值255表示最高的飽和度。RGB即是代表紅、綠、藍(lán)三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是目前運(yùn)用最廣的顏色系統(tǒng)之一。1.2 畫筆CPen封裝了Windows圖形設(shè)備接口的畫筆功能。在用繪圖的時(shí)候,需要首先設(shè)置畫筆的屬性。對(duì)每一個(gè)畫筆均可以選擇不同的寬度,顏色,線型等等。1.3 畫刷CBrush類封裝了Windows圖形設(shè)備接口的畫刷的API函數(shù),包括畫刷的實(shí)顏色、陰影、或模式。要使用CBrush,先用構(gòu)造函數(shù)構(gòu)造一個(gè)CBrush對(duì)象,然后為需要用畫刷的成員函籽傳遞一個(gè)指針或引用。1.4 畫圖CDC類支持設(shè)備描述表,提供Windows API函數(shù)。CDC對(duì)象提供用于設(shè)備描述表如打印機(jī)或顯示器的成員函數(shù)。CDC2類提供一個(gè)包含Win32 API的成員函數(shù)的數(shù)組,它支持所有的設(shè)備描述表的操作,如使用各種繪畫工具、GDI畫刷和字體對(duì)象選擇、對(duì)顏色和調(diào)色板的操作等,以及擁有本文中提到的畫線和畫簡(jiǎn)單形狀如多邊形、矩形、圓的功能。2 總體設(shè)計(jì)2.1 圖形編輯器的功能本程序設(shè)計(jì)要求具有基本圖形包括點(diǎn)、直線、折線、多邊形、圓、矩形。繪制時(shí)先選擇所繪制圖形類型3,然后用鼠標(biāo)完成繪制,可對(duì)其進(jìn)行選中、刪除操作,并且都可編輯其基本屬性,如顏色、線寬等。同時(shí)編輯時(shí)必須以選中狀態(tài)才可進(jìn)行編輯。本程序設(shè)計(jì)還要求能夠?qū)⑺L制圖形成功保存進(jìn)文件及能夠?qū)⑺4嫖募晒ψx取,并顯示出來(lái),并且實(shí)現(xiàn)對(duì)所讀取圖形的編輯功能與再保存功能。程序的系統(tǒng)功能模塊圖如圖2-1系統(tǒng)功能模塊圖所示。繪圖應(yīng)用程序設(shè)計(jì)基本圖形繪制基本圖形編輯保存與讀取圖2-1 系統(tǒng)功能模塊圖2.2 設(shè)計(jì)的基本思路首先,對(duì)于基本圖形的創(chuàng)建,可以采用繼承的方法。建立一個(gè)基類,擁有所有圖形的基本結(jié)構(gòu),在這里我定義了一個(gè)頭結(jié)構(gòu),和一個(gè)格式結(jié)構(gòu)來(lái)定義圖形的基本參數(shù),另外還包括一些成員函數(shù)。然后針對(duì)每個(gè)圖形創(chuàng)建不同的類,這些類重載基類中成員函數(shù),定義自身圖形的繪制過(guò)程。其次,對(duì)于圖形的編輯。對(duì)每一個(gè)圖形可以進(jìn)行選中,刪除,和修改基本屬性。要選中圖形時(shí),就要對(duì)鼠標(biāo)的每一次單擊事件4,進(jìn)行一次循環(huán),判斷是否點(diǎn)中某個(gè)圖形,如點(diǎn)中,這個(gè)圖形繪制選中標(biāo)志,否則取消所有對(duì)象選中狀態(tài)。編輯圖形時(shí),應(yīng)在選出中的基礎(chǔ)上進(jìn)行對(duì)選中圖形的編輯,可建一個(gè)屬性對(duì)話框,進(jìn)行屬性的顯示,修改操作,或建立一個(gè)右鍵菜單,進(jìn)行屬性編輯和一些圖形操作。再次,文件保存時(shí),本文采用索引散列文件的方法,用三個(gè)文件進(jìn)行存儲(chǔ),一個(gè)存儲(chǔ)索引數(shù)組,一個(gè)存儲(chǔ)圖形對(duì)象結(jié)構(gòu)體,一個(gè)存儲(chǔ)圖形對(duì)象的點(diǎn)坐標(biāo)。采用此方法,主要是考慮針對(duì)每個(gè)圖形點(diǎn)坐標(biāo)個(gè)數(shù)不一樣,因此每個(gè)對(duì)象所占存儲(chǔ)空間大小不一樣。這樣若進(jìn)行刪除,修改等操作將出現(xiàn)文件碎片,出現(xiàn)空間浪費(fèi)。3 詳細(xì)設(shè)計(jì)3.1 基本圖形繪制模塊本模塊中將簡(jiǎn)紹畫線和畫簡(jiǎn)單形狀如多邊形、矩形、圓等功能,如圖3-1基本圖形模塊圖所示?;緢D形繪制點(diǎn)的繪制直線的繪制折線的繪制多邊形的繪制圓的繪制矩形的繪制文字顯示圖3-1 基本圖形模塊圖3.1.1 繪制直線 繪制直線涉及到兩個(gè)方法:MoveTo和LineTo。MoveTo(int startx,int starty)的任務(wù)是設(shè)置當(dāng)前畫筆的位置到(startx,starty),而不進(jìn)行任何繪圖工作。然后可以調(diào)用LineTo(int endx,int endy)來(lái)畫直線。它從當(dāng)前畫筆的位置畫一條直線到點(diǎn)(endx,endy),并將當(dāng)前的畫筆位置改變?yōu)?endx,endy)。3.1.2 繪制橢圓原型:BOOL Ellipse(int x1,int y1,int x2,int y2);用途:畫一個(gè)橢圓。其中心為限定矩形的中心。該限定矩形不包括右邊和底部的坐標(biāo)。用當(dāng)前畫刷填充它的內(nèi)部區(qū)域,并用當(dāng)前畫筆畫此橢圓。3.1.3 繪制多邊形原型:BOOL Polypon(LPPOINT lpPoints,int nCount);用途:畫一多邊形,該多邊形由兩個(gè)或兩個(gè)以上由直線連接的點(diǎn)組成。系統(tǒng)自動(dòng)封閉多邊形。填充時(shí)用當(dāng)前設(shè)置的畫刷進(jìn)行填充,并且當(dāng)前畫筆畫多邊形。3.1.4 繪制矩形原型:Rectangle(int X1, int Y1, int X2, int Y2);用途:用當(dāng)前畫筆畫一個(gè)矩形,并用當(dāng)前畫刷填充該矩形內(nèi)部。3.2 基本圖形編輯模塊針對(duì)每個(gè)圖形5,都擁有一些基本屬性信息,以及相應(yīng)的坐標(biāo)信息。包括圖形頭結(jié)構(gòu)、圖形格式結(jié)構(gòu)、圖形坐標(biāo)信息。其中圖形頭結(jié)構(gòu)包括圖形ID、保存類型、圖形類別、圖形所占點(diǎn)坐標(biāo)個(gè)數(shù)、圖形中心點(diǎn)位置、圖形所占矩形區(qū)域;圖形格式結(jié)構(gòu)包括圖形線寬、線顏色、填充色等;圖形坐標(biāo)信息是根據(jù)圖形類型來(lái)確定所占點(diǎn)坐標(biāo)個(gè)數(shù)。如點(diǎn):僅擁有一個(gè)坐標(biāo)。直線:擁有兩個(gè)坐標(biāo)。折線:擁有大于2個(gè)坐標(biāo)。多邊形:擁有大于2個(gè)坐標(biāo)。圓:擁有兩個(gè)坐標(biāo)。矩形:擁有兩個(gè)坐標(biāo)。這個(gè)模塊是針對(duì)每個(gè)圖形,可對(duì)其進(jìn)行選中、刪除操作,并且都可編輯其基本屬性,如顏色、線寬等。同時(shí)編輯時(shí)必須以選中狀態(tài)才可進(jìn)行編輯,如圖3-2基本圖形編輯模塊圖所示。圖形選中基本圖形的編輯圖形刪除修改屬性圖3-2 基本圖形編輯模塊圖3.3 圖形繪制方法點(diǎn)的繪制:點(diǎn)一個(gè)點(diǎn),以此點(diǎn)為中心繪制半徑為2的圓,作為點(diǎn)。方法為調(diào)用Ellipse函數(shù)。直線的繪制:確定兩點(diǎn)坐標(biāo)后,開始繪制。方法為調(diào)用MoveTo,LineTo函數(shù)。折線的繪制:確定折線坐標(biāo)后,開始直線的連續(xù)繪制即可。多邊形的繪制:確定折線坐標(biāo)后,開始繪制。方法為調(diào)用Polygon函數(shù)。圓6的繪制:確定圓心坐標(biāo)后,開始繪制。方法為調(diào)用Ellipse函數(shù)。矩形的繪制:確定矩形坐標(biāo)后,開始繪制。方法為調(diào)用Rectangle函數(shù)。圖形繪制的效果圖如圖3-3所示。 圖3-3 基本圖形繪制效果圖3.4 圖形繪制過(guò)程采用消息響應(yīng)方式,先選擇一種圖形類型后,由鼠標(biāo)負(fù)責(zé)在視圖窗口中確定每個(gè)圖形的點(diǎn)坐標(biāo)位置,然后完成圖形繪制,并自動(dòng)存儲(chǔ)到內(nèi)存7。主要消息事件為WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_RBUTTONUP。當(dāng)選擇一種圖形類型后,在客戶區(qū)點(diǎn)擊左鍵后,判斷圖形類型,若為點(diǎn),則完成繪制與存儲(chǔ)。若為直線,則開始響應(yīng)WM_MOUSEMOVE事件,繪制鼠標(biāo)移動(dòng)期間直線,當(dāng)再次點(diǎn)擊鼠標(biāo)左鍵完成繪制與存儲(chǔ)。若為折線,則開始連續(xù)直線的繪制方法,每點(diǎn)擊一次左鍵完成一段直線的繪制,直到點(diǎn)擊右鍵,響應(yīng)WM_RBUTTONDOWN事件后,完成繪制與存儲(chǔ)。若為多邊形,則方法同折線,只是繪制時(shí)采用繪制多邊形方法并存儲(chǔ)。若為圓,則開始響應(yīng)WM_MOUSEMOVE事件,繪制鼠標(biāo)移動(dòng)期間的動(dòng)態(tài)圓,當(dāng)再次點(diǎn)擊左鍵后,完成繪制與存儲(chǔ)。若為矩形,則方法同圓,只是繪制時(shí)采用繪制圓的方法并存儲(chǔ)。3.5 圖形構(gòu)造與存儲(chǔ)方法本程序是采用數(shù)組的方式保存圖形對(duì)象。聲明為:CTypedPtrArray sogOA8;因每個(gè)圖形繼承自同一個(gè)基類,并且基類擁有圖形的基本結(jié)構(gòu)信息,因此存儲(chǔ)時(shí)完全可按基類來(lái)存儲(chǔ)。3.6 圖形編輯方法運(yùn)行程序后,菜單欄中選擇修改圖形屬性菜單項(xiàng),之后將彈出修改圖形對(duì)話框,如圖3-4修改圖形對(duì)象屬性對(duì)話框圖,即可進(jìn)行修改圖形的線條顏色、線條類型、填充顏色、填充方式等屬性。 圖3-4 修改圖形對(duì)象屬性對(duì)話框圖3.7 保存與讀取模塊分析圖形的基本結(jié)構(gòu)信息可知每個(gè)圖形的頭結(jié)構(gòu)9與格式結(jié)構(gòu)數(shù)據(jù)的大小是一樣的,只是點(diǎn)坐標(biāo)個(gè)數(shù)的不一致,因此,由圖形大小的不一致,而導(dǎo)致文件的保存問(wèn)題,在實(shí)際中可以將每個(gè)圖形對(duì)象的信息分別保存在不同的文件中。即對(duì)圖形的頭結(jié)構(gòu)與格式結(jié)構(gòu),單獨(dú)存儲(chǔ)進(jìn)一個(gè)文件,而每個(gè)圖形的點(diǎn)坐標(biāo)結(jié)構(gòu)存儲(chǔ)在一個(gè)單獨(dú)的文件中,這樣可以保證在圖形的編輯過(guò)程中,文件中不會(huì)出現(xiàn)碎片。每個(gè)圖形ID唯一,因此將ID作為每個(gè)圖形的索引值,通過(guò)對(duì)指定值求余的方法,計(jì)算hash地址。若有重復(fù)的計(jì)算結(jié)果,即有相同的hash地址值,那么采用向后鏈接的方法實(shí)現(xiàn)索引。將文件的索引單獨(dú)保存到一個(gè)文件中,這樣便于索引數(shù)組的讀取與保存,同時(shí)也易于其他文件的讀取與保存。圖形對(duì)象存入文件9實(shí)現(xiàn)。根據(jù)存儲(chǔ)圖形對(duì)象的數(shù)組,依次將數(shù)組中的對(duì)象存入文件,就單個(gè)對(duì)象來(lái)說(shuō),要實(shí)現(xiàn)存入文件,必須先根據(jù)ID值,計(jì)算其hash地址后,修改索引表以存儲(chǔ)其在文件中位置。圖3-4保存與讀取模塊圖為本模塊結(jié)構(gòu)圖。文件保存文件讀取保存與讀取 圖3-7 保存與讀取模塊圖4 總結(jié)通過(guò)閱讀大量文獻(xiàn)資料,對(duì)圖形與文件的操作有了較深的認(rèn)識(shí)。在了解編輯環(huán)境的基礎(chǔ)上實(shí)現(xiàn)的圖形的繪制,對(duì)編程環(huán)境有了進(jìn)一步的掌握。同時(shí),對(duì)類的機(jī)制有了更進(jìn)一步的了解。程序?qū)崿F(xiàn)了基本圖形,如點(diǎn)、直線、折線、圓、多邊形、矩形的繪制與保存和文字的輸出。在繪制這些基本圖形的過(guò)程中,直接調(diào)用了編程環(huán)境中自帶的繪圖函數(shù),并沒(méi)有研究這些基本圖形的繪制算法。在每種圖形的繪制過(guò)程中,都由消息來(lái)響應(yīng),通過(guò)鼠標(biāo)的操作,完成了圖形的繪制。同時(shí)本程序還可以對(duì)圖形進(jìn)行刪除、修改等功能。在文件保存方面,基本上已經(jīng)實(shí)現(xiàn)了一個(gè)軟件的保存與讀取操作,可以通過(guò)工具欄上的保存和打開按鈕實(shí)現(xiàn)。總之,程序?qū)崿F(xiàn)了點(diǎn)、直線、折線、多邊形、圓、矩形的繪制和文字的顯示,在此基礎(chǔ)上,可以相互結(jié)合,生成一些復(fù)雜的圖形。但本程序只是一個(gè)簡(jiǎn)單的圖形編輯器,無(wú)法合成很復(fù)雜的圖形。參考文獻(xiàn)1 王育堅(jiān)Visual C+面向?qū)ο缶幊探坛瘫本呵迦A大學(xué)出版社,20082 侯俊杰深入淺出MFC第2版廣東:南方出版社,20073 嚴(yán)華峰Visual C+課程設(shè)計(jì)案例精編北京:中國(guó)水利水電出版社,20044 侯識(shí)忠等數(shù)據(jù)結(jié)構(gòu)算法Visual C+ 6.0程序集北京:中國(guó)水利水電出版社,20055 郭小剛,金星C/C+程序設(shè)計(jì)教程人民郵電出版社,20046 蔡士杰等譯計(jì)算機(jī)圖形學(xué)北京:電子工業(yè)出版社,1998 7 劉峻Delphi數(shù)字圖像處理及高級(jí)應(yīng)用北京:科學(xué)出版社,20038 陸楓,陳傳波計(jì)算機(jī)圖形學(xué)基礎(chǔ)北京:電子工業(yè)出版社,20029 倪田平編著計(jì)算機(jī)圖形學(xué)北京:北京大學(xué)出版社,1999附錄*基本圖形繪制模塊*void CGraphicsEditSystemView:OnDraw(CDC* pDC)CGraphicsEditSystemDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);for (int i = 0;i sogOA.GetSize();i+)pDoc-sogOA.GetAt(i)-Draw(pDC);/ TODO: add draw code for native data hereCPen PenNew;/創(chuàng)建畫筆CPen *pPenOld;/定義畫筆CBrush BrushNew;/創(chuàng)建畫刷CBrush *pBrushOld;/創(chuàng)建畫刷PenNew.CreatePen(com1,1,RGB(0,0,0);/創(chuàng)建畫筆對(duì)象BrushNew.CreateHatchBrush(com2,RGB(red,green,blue);/創(chuàng)建設(shè)定的畫刷對(duì)象pPenOld=pDC-SelectObject(&PenNew);/新創(chuàng)建的畫筆選入設(shè)備描述表pBrushOld=pDC-SelectObject(&BrushNew);/創(chuàng)建新畫刷選入設(shè)備描述表if(m_rect)pDC-Rectangle(x1,y1,x2,y2);if(m_circle)pDC-Ellipse(x1,y1,10*x1,10*y1); pDC-SelectObject(pPenOld); BrushNew.DeleteObject();LRESULT CGraphicsEditSystemView:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) / TODO: Add your specialized code here and/or call the base classint aa=operationstate;/ =-1:正常狀態(tài)/ =0: 畫點(diǎn)/ =1: 畫直線/ =2: 畫折線/ =3: 畫多邊形/ =4: 畫圓/ =5: 畫矩形switch (message)case WM_LBUTTONDOWN: if (aa = -1) CGraphicsEditSystemDoc * pDoc=GetDocument();CDC *pDC=GetDC();mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);for(int i=0;isogOA.GetSize();i+)/點(diǎn)中對(duì)象,將對(duì)象狀態(tài)改為選中if (pDoc-sogOA.GetAt(i)-Pointed(mPointNow.x,mPointNow.y,2) = true) & (pDoc-sogOA.GetAt(i)-bSelected = false) SelectedId = pDoc-sogOA.GetAt(i)-geHeader.m_ID; pDoc-sogOA.GetAt(i)-bSelected = true; CSeletedGE * sge=new CSeletedGE();/ sge-Index=i; if (select) for (int j = 0;jSelectedGE.GetSize();j+) pDoc-sogOA.GetAt(pDoc-SelectedGE.GetAt(j)-Index)-bSelected = false; InvalidateRect(NULL,TRUE); pDoc-SelectedGE.RemoveAll(); pDoc-SelectedGE.Add(sge); else pDoc-SelectedGE.Add(sge); pDoc-sogOA.GetAt(i)-Draw(pDC); selected = true; if(selected)elsefor (int j = 0;jSelectedGE.GetSize();j+) pDoc-sogOA.GetAt(pDoc-SelectedGE.GetAt(j)-Index)-bSelected = false;InvalidateRect(NULL,TRUE); selected = false; if(aa = 0)/畫點(diǎn)mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this);sGrapElemHeader geHdr;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPosition1; CVNormPoint * VNPoint; /初始化點(diǎn)圖形的數(shù)據(jù)格式 geFmt=pDoc-beginElemFormat;/初始化點(diǎn)圖形的數(shù)據(jù)頭geHdr.GrapElemType=0;geHdr.SaveType = 3;pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1;geHdr.m_ID=pDoc-MaxNumElemId;geHdr.m_PointsNumber=1;psPstn0.x = mPointNow.x;psPstn0.y = mPointNow.y;/構(gòu)造該點(diǎn)圖形對(duì)象VNPoint=new CVNormPoint(geFmt,geHdr,psPstn);/繪制該點(diǎn)圖形對(duì)象,Draw函數(shù)將根據(jù)該圖元的格式成員函數(shù),/選擇不同的方式繪制該對(duì)象VNPoint-Draw(pDC);/保存該點(diǎn)對(duì)象pDoc-sogOA.Add(VNPoint); if(aa=6)/輸出文字,坐標(biāo)還得改CGraphicsEditSystemDoc *pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /設(shè)置文字 TEXTMETRIC tm; CFont fn; fn.CreatePointFont(200,華文行楷,pDC); CFont *Oldfn=pDC-SelectObject(&fn); pDC-GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); pDC-TextOut(mPointNow.x,mPointNow.y,這是一個(gè)畫圖程序,請(qǐng)畫圖!); ShowCaret();if(aa = 1)/畫直線CGraphicsEditSystemDoc * pDoc=GetDocument();CClientDC *pDC=new CClientDC(this);/設(shè)置畫筆CPen pen(0,1,RGB(0,0,255);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_COPYPEN);/用戶鼠標(biāo)點(diǎn)在屏幕中的位置mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);float xx1=0.00,yy1=0.00,xx2=0.00,yy2=0.00;if(PushNumb=0)PushNumb+;mPointOrigin=mPointNow;mPointOld=mPointNow;SetCapture();else if(PushNumb=1)sGrapElemHeader geHdr;geHdr.m_PointsNumber=2;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPositiongeHdr.m_PointsNumber;CVNormLine * VNLine;geFmt=pDoc-beginElemFormat;/初始化一條直線圖形的數(shù)據(jù)頭geHdr.GrapElemType=1;geHdr.SaveType = 3;pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1;geHdr.m_ID=pDoc-MaxNumElemId;psPstn0.x=mPointOrigin.x;psPstn0.y=mPointOrigin.y;psPstn1.x=mPointNow.x;psPstn1.y=mPointNow.y;/構(gòu)造該直線圖形對(duì)象VNLine=new CVNormLine(geFmt,geHdr,psPstn);/繪制該直線圖形對(duì)象VNLine-Draw(pDC);/保存該直線對(duì)象pDoc-sogOA.Add(VNLine);PushNumb=0;ReleaseCapture();/ReleaseDC(pDC);pDC-SelectObject(pOldPen); if(aa=2|aa=3)/畫折線或者多邊形區(qū)域mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);CPointPosition * ps=new CPointPosition();ps-x=mPointNow.x;ps-y=mPointNow.y;pPntPstnArray.Add(ps);if(PushNumb=0)SetCapture();mPointOrigin=mPointNow;mPointOld=mPointNow;elsemPointOrigin=mPointOld;mPointOld=mPointNow;PushNumb+; if(aa = 4)/畫圓 CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /設(shè)置畫筆 CPen pen(0,1,RGB(0,0,255); CPen*pOldPen=pDC-SelectObject(&pen); CBrush * pOldBrush=(CBrush * )pDC-SelectStockObject(NULL_BRUSH); mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam); if(PushNumb=0) PushNumb+; mPointOrigin=mPointNow; mPointOld=mPointNow; SetCapture(); else if(PushNumb=1) sGrapElemHeader geHdr; geHdr.m_PointsNumber=2; sGrapElemFormat geFmt; sPointPosition * psPstn; psPstn=new sPointPositiongeHdr.m_PointsNumber; CVNormCircle * VNCircle; geFmt=pDoc-beginElemFormat; geHdr.GrapElemType = 4; pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1; geHdr.m_ID=pDoc-MaxNumElemId; geHdr.SaveType = 3; /初始化圓圖形的點(diǎn)數(shù)據(jù) psPstn0.x=mPointOrigin.x; psPstn0.y=mPointOrigin.y; psPstn1.x=mPointNow.x; psPstn1.y=mPointNow.y; /構(gòu)造該圓圖形對(duì)象 VNCircle=new CVNormCircle(geFmt,geHdr,psPstn); pDC-SetROP2(R2_NOT); pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y); /繪制該圓圖形對(duì)象 VNCircle-Draw(pDC); /保存該圓對(duì)象 pDoc-sogOA.Add(VNCircle); PushNumb=0; ReleaseCapture(); /ReleaseDC(pDC); pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush); if(aa = 5)/畫矩形 CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /設(shè)置畫筆 CPen pen(0,1,RGB(0,0,255); CPen*pOldPen=pDC-SelectObject(&pen); CBrush * pOldBrush=(CBrush * )pDC-SelectStockObject(NULL_BRUSH); pDC-SetROP2(R2_COPYPEN); mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam); if(PushNumb=0) PushNumb+; mPointOrigin=mPointNow; mPointOld=mPointNow; SetCapture(); else if(PushNumb=1) sGrapElemHeader geHdr; geHdr.m_PointsNumber=2; sGrapElemFormat geFmt; sPointPosition * psPstn; psPstn=new sPointPositiongeHdr.m_PointsNumber; CVNormRectangular * VNRect; geFmt=pDoc-beginElemFormat; geHdr.GrapElemType = 5; pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1; geHdr.m_ID=pDoc-MaxNumElemId; geHdr.SaveType = 3; /初始化矩形圖形的點(diǎn)數(shù)據(jù) psPstn0.x=mPointOrigin.x; psPstn0.y=mPointOrigin.y; psPstn1.x=mPointNow.x; psPstn1.y=mPointNow.y; /構(gòu)造該矩形圖形對(duì)象 VNRect=new CVNormRectangular(geFmt,geHdr,psPstn); /擦除OnMouseMove最后一點(diǎn)時(shí)畫的矩形 pDC-SetROP2(R2_NOT); pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y); /繪制該矩形圖形對(duì)象 VNRect-Draw(pDC); /保存該矩形對(duì)象 pDoc-sogOA.Add(VNRect); PushNumb=0; ReleaseCapture(); /ReleaseDC(pDC); pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush); break;case WM_MOUSEMOVE:mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam);if(aa = 1)/畫直線CClientDC *pDC=new CClientDC(this);/設(shè)置畫筆CPen pen(0,0,RGB(0,0,0);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointOld);pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointNow);mPointOld=mPointNow;pDC-SelectObject(pOldPen);delete pDC;if(aa=2|aa=3)&PushNumb=1)CClientDC *pDC=new CClientDC(this);OnPrepareDC(pDC); /設(shè)置畫筆CPen pen(0,0,RGB(0,0,0);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_NOT);if(mPointOld!=mPointNow)pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointOld);pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointNow);mPointOld=mPointNow;pDC-SelectObject(pOldPen);delete pDC;if(aa = 4)/畫圓CClientDC *pDC=new CClientDC(this);/設(shè)置畫筆CPen pen(PS_DASH,1,RGB(0,0,0);CPen * pOldPen=pDC-SelectObject(&pen);CBrush * pOldBrush=(CBrush *)pDC-SelectStockObject(NULL_BRUSH);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y);pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointNow.x,mPointNow.y);mPointOld=mPointNow;pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);delete pDC;if(aa = 5)/畫矩形CClientDC *pDC=new CClientDC(this);/設(shè)置畫筆CPen pen(PS_DASH,1,RGB(0,0,0);CPen * pOldPen=pDC-SelectObject(&pen);CBrush * pOldBrush=(CBrush *)pDC-SelectStockObject(NULL_BRUSH);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y);pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointNow.x,mPointNow.y);mPointOld=mPointNow;pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);delete pDC;break;case WM_RBUTTONDOWN: if (aa = 2) CGraphicsEditSystemDoc * pDoc=GetDocument();CClientDC *pDC=new CClientDC(this);sGrapElemHeader geHdr;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPositionpPntPstnArray.GetSize();CVNormPolyline * VNPolyline

溫馨提示

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

評(píng)論

0/150

提交評(píng)論