簡易畫圖板設計報告分析

2023-02-10 04:30:02 字數 3678 閱讀 8329

設計報告:graphic簡易畫圖板

韓偉謝程焜肖越周峰

電科二班

1設計目的

設計乙個單文件型別的mfc appwizard (exe)工程,工程取名為:graphic。此程式將實現簡單的繪圖功能,包括點、直線、矩形、橢圓、扇形和連續線的繪製。

並且能實現繪圖的控制,包括線寬、線型和顏色的設定,圖形的儲存和開啟以及筆刷的使用。

2 總體設計

設計圖如圖6

圖63詳細設計

首先,新建乙個單文件型別的mfc appwizard (exe)工程,工程取名為:graphic。為此程式新增乙個子選單,選單名稱為「繪圖」,並為其新增六個選單項,分別用來控制不同圖形的繪製。

當使用者選擇其中的乙個選單項後,程式將按照當前的選擇進行相應圖形的繪製。新增的六個選單項的id及名稱如表1所示。然後分別為這六個選單項新增命令響應,本程式讓視類(cgraphicview)對這些選單命令進行響應,這六個響應函式的名稱分別如表1所示。

表1新增的選單項

在程式執行以後,當使用者單擊某個選單項時,應該把使用者的選擇儲存起來,以便隨後的繪圖操作使用。因此在cgraphicview類中新增乙個私有變數m_ndrawtype;用來儲存使用者的選擇,該變數的定義如下所述:

private: uint m_ndrawtype;

接著,在視類的建構函式中將此變數初始化為0,程式**如下:

cgraphicview::cgraphicview()

利用switch/case語句,來分別完成相應圖形的繪製。當使用者選擇【繪圖】選單下的不同子選單項時,將變數m_ndrawtype設定為不同的值。程式**如下:

void cgraphicview::ondot()

void cgraphicview::online()

void cgraphicview::onrectangle()

void cgraphicview::onellipse()

void cgraphicview::onshanxing()

void cgraphicview::onlianxuxian()

3.1點、直線、矩形、橢圓的繪製 (周峰謝程焜)

對於直線、矩形和橢圓,在繪製時都可有兩點來確定其圖形。當滑鼠左擊時得到乙個點,當滑鼠左鍵鬆開時得到另外乙個點。為視類cgraphicview分別捕獲滑鼠左鍵按下和彈起這兩個訊息。

另外當滑鼠左鍵按下時,需要將滑鼠當前按下點儲存,因此我們為cgraphicview再增加乙個cpoint型別的私有成員變數:m_ptorigin,在視類的建構函式中將此變數初始化為0。在滑鼠按下訊息響應函式中,儲存該點,**如下:

void cgraphicview::onlbuttondown(uint nflags, cpoint point)

在滑鼠左鍵彈起訊息響應函式中實現繪圖,**如下:

void cgraphicview::onlbuttonup(uint nflags, cpoint point)

在上述程式中,設定乙個點,用到的函式是setpixel,這也是cdc類的乙個成員方法,該函式的生命形式如下:colorref setpixel (point point,colorref crcolor);該函式是在指定的點設定乙個畫素。其中第乙個引數(point)是指定的點,第二個引數(crcolor)是指定的顏色。

在程式中設定的顏色在系統顏色表中可能不存在,但系統會選擇一種和這個顏色最接近的顏色。rgb是乙個巨集,它有三個引數,分別代表紅、綠、藍三種顏色的值。這三個引數byte型別,取值範圍為0~255。

rgb(0,0,0)是黑色,rgb(255,255,255)是白色,將這三個分量設定成為0~255之間的任意值,從而得到各種不同的顏色。這裡的rgb(255,0,0)是紅色。

繪製直線時,首先呼叫moveto函式移動到原點,然後呼叫lineto函式繪製到終點。

繪製矩形時使用rectangle函式,該函式宣告形式為:bool rectangle (lpcrect lprect);

該函式有乙個指向crect物件的引數,後者可以利用兩個點來構造。需要注意的是該函式需要的是指向crect物件的指標,而上述**中傳遞的卻是crect物件,但執行編譯時也能成功通過,執行時也不會報錯,這是為什麼呢?我們知道c系列的語言都是強型別語言,如果型別不匹配的話,需要進行強制型別轉換。

但這裡為什麼沒有進行這樣的強制型別轉換程式也可以通過呢?實際上,crect類提供了這樣乙個成員函式:過載lpcrect操作符,其作用是將crect轉換為lpcrect型別。

因此,當在程式中給rectangle函式的引數賦值時,如果它發現該引數是乙個crect物件,它就會隱式地呼叫lpcrect操作符,將crect型別的物件轉換為lprect型別。因此,在給函式傳遞引數時,如果我們看到的傳遞的數值型別和所需要的型別不匹配,但編譯和執行都正確的情況時,就要想想這其中的緣由了。當然,有的情況下可能是這些型別之間本來就可以互相轉換,例如short型別和int型別。

但是引數是物件類的話,就要考慮了,它選擇的物件的構造方法進行的隱式轉換,還是有其他過載的操作符。

當使用者選擇橢圓選單項時,呼叫ellipes函式繪製乙個橢圓。

3.2連續線和扇形的繪製(周峰謝程焜)

windows系統為我們提供了乙個畫圖程式,在該程式中,利用畫筆可以繪製連續的線條,下面我們設計繪製連續線和扇形。

為了繪製連續的線條,首先要得到線條的起點,這在前面已經實現。然後需要捕獲滑鼠移動過程中的每乙個點,這可以通過捕獲滑鼠移動訊息(wm_mousemove)來實現。在此訊息響應函式中,在依次捕獲的各個點之間繪製一條條非常短的線段,從而就可以繪製出一條連續的線條。

遵照這一思路,我們開始增加程式的功能。首先為視類增加滑鼠移動訊息(wm_mousemove)的響應函式(onmousemove)。這樣,只要滑鼠在應用程式視窗中移動時都會進入到這個訊息響應函式中。

但這並不是我們所期望的,我們希望在滑鼠左鍵按下後開始繪圖。因此,我們需要有乙個變數來表示滑鼠左鍵是否按下這一狀態,然後在滑鼠移動訊息響應函式中對這一變數進行判斷。當此變數為真,即滑鼠左鍵已經按下去,我們開始繪圖。

於是,為視類新增乙個bool型的私有變數m_bdraw,當滑鼠左鍵按下去時,此變數為真;當滑鼠左鍵彈起時,此變數為假,這時,我們就不再繪製線條了。該變數在視類標頭檔案中的定義**如下:

private:

bool m_bdraw;

接下來在視類的建構函式中,將此變數初始化為false。

m_bdraw=false;

當滑鼠左鍵按下去時,在視類的onlbuttondown函式中將此變數初始化為true。

m_bdraw=true;

當滑鼠左鍵彈起時,在視類的onlbutton函式中將此變數初始化為假。

m_bdraw=false;

然後在onmousemove函式中首先對m_bdraw變數進行判斷,如果其值為真,說明滑鼠左鍵已經按下去了,這時就可開始進行畫線操作。還有一點需要注意,因為每繪製一條線段後,下次應該從這條線段的終點開始繼續繪製。因此,繪製完當前線段後,應該修改線段的起點,將當前線段的終點作為下一條線段的起點,程式**如下:

void cgraphicview::onmousemove(uint nflags, cpoint point)

{// todo: add your message handler code here and/or call default

{//建立並獲得裝置描述

cclientdc dc(this);

//建立寬度為1的實線紅色畫筆

cpen pen (ps_solid, 1, rgb(255,0,0));

簡易開關電源設計報告

四川教育學院 應用電子設計報告 課程名稱 protel99 電路設計 系部 物理與電子技術系 專業班級 應用電子技術 0901 學生姓名 x x x 學號指導教師 完成時間 開關電源電路設計報告 一.設計要求 直流穩定電源主要包括線性穩定電源和開關型穩定電源,由於開關穩壓電源的優點是體積小,重量輕,...

簡易電子琴設計報告

專業 電氣工程及其自動化 班級 12級過程控制 小組 第22 組 姓名 門振威 學號 120544145 指導教師 王松林 2015.06.15 摘要555 定時器是一種模擬和數字功能相結合的中規模整合器件。555 定時器成本低,效能可靠,只需要外接幾個電阻 電容,就可以實現多諧振盪器 單穩態觸發器...

簡易溫度感測器設計報告

機制091 109011016 詹杭羽 前言 在機電一體化系統中,感測器處系統之首,其作用相當於系統感受器官,能快速 精確地獲取資訊並能經受嚴酷環境考驗,是機電一體化系統達到高水平的保證。如缺少這些感測器對系統狀態和對資訊精確而可靠的自動檢測,系統的資訊處理 控制決策等功能就無法談及和實現。一 設計...