北郵程式設計實踐報告mfc畫圖

2021-03-04 09:49:25 字數 2846 閱讀 9210

程式設計實踐設計

報告課題名稱:簡單畫圖程式的設計與實現

學生姓名:

班級:班內序號:

學號:日期:

課題概述

1.1課題目標和主要內容:

該軟體功能與windows下附件中的畫圖軟體有相似功能。本程式是在vc2010平台上用mfc所編。繪製方面的功能主要包括繪製各種圖元,包括直線、矩形、橢圓、扇形、連續線,用筆自由繪圖。

繪圖時可以選擇各種顏色,各種線型和線寬。

1.2系統的主要功能

設計乙個單文件型別的mfc appwizard (exe)工程,此程式將實現簡單的繪圖功能,包括點、直線、矩形、橢圓、扇形和連續線的繪製。並且能實現繪圖的控制,包括線寬、線型和顏色和字型的設定。

2. 系統設計

2.1 系統總體框架

總體設計

設計圖如圖6

2.2 系統詳細設計

1.首先,新建乙個單文件型別的mfc appwizard (exe)工程,工程取名為:show。

為此程式新增乙個子選單,選單名稱為「繪圖」,並為其新增六個選單項,分別用來控制不同圖形的繪製。當使用者選擇其中的乙個選單項後,程式將按照當前的選擇進行相應圖形的繪製。

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

private: drawtype dtype;

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

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

void cshowview::onshowsline()

void cshowview::onshowcline()

void cshowview::onshownosector()

void cshowview::onshowsector()

void cshowview::onshowrect()

void cshowview::onshowecllipse()

2.直線、矩形、橢圓扇形的繪製

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

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

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

cview::onlbuttondown(nflags, point);

}3.連續線和扇形的繪製

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 cshowview::onmousemove(uint nflags, cpoint point)

}dc.selectobject(poldpen);

cview::onmousemove(nflags, point);

}4.顏色

顏色對話方塊看起來比較複雜。實際上,mfc為我們提供了乙個類:ccolordialog,可以很方便的建立這樣的乙個顏色對話方塊。

void cshowview::onshowcolor()

5.設定線形線寬

為程式新增乙個設定對話方塊,允許使用者指定畫筆的型別、線寬,並讓隨後的繪圖操作就使用使用者指定的新設定值來進行繪製。

**如下:

void cshowview::onshowlstylewidth()

}6.設定字型

北郵程式設計實踐學生管理系統實驗報告

程式設計實踐設計 報告課題名稱 基於mfc與access資料庫的學生管理系統 學生姓名 班級 2012211109 班內序號 26 學號 2012210270 日期 2014.5.31 1 課題概述 1.1課題目標和主要內容 本課題中主要使用的工具mfc,在vs2010平台下進行開發。通過ado庫連...

程式設計基礎實踐報告

課程設計報告 課程名稱 程式設計基礎實踐 院系 資訊科學與工程學院 班級 計科1504班 設計者學號 設計時間 2015.12 目錄一.摘要3 關鍵字3 二.課程設計目標3 三.課程設計環境4 四.實驗一4 1.實驗要求4 2.實驗分析5 3.流程圖5 3.1主函式流程5 3.2寫入函式的流程6 3...

高階語言程式設計實踐報告

題目 公司員工資訊管理系統設計 學號姓名 專業年月日 1 功能要求 1 問題描述 某公司需要儲存員工的編號 姓名 性別 所在部門,級別,並進行工資的計算。其中,員工分為經理 技術人員 銷售人員和銷售經理。2 功能要求 1 新增功能 程式能夠任意新增上述四類人員的記錄,可提供選擇介面供使用者選擇所要新...