mfc畫圖板的設(shè)計采用vc++

mfc畫圖板的設(shè)計采用vc++

ID:10858583

大小:1.24 MB

頁數(shù):52頁

時間:2018-07-08

mfc畫圖板的設(shè)計采用vc++_第1頁
mfc畫圖板的設(shè)計采用vc++_第2頁
mfc畫圖板的設(shè)計采用vc++_第3頁
mfc畫圖板的設(shè)計采用vc++_第4頁
mfc畫圖板的設(shè)計采用vc++_第5頁
資源描述:

《mfc畫圖板的設(shè)計采用vc++》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、1.添加菜單項“繪圖”如下圖2.在繪圖菜單項下繼續(xù)添加菜單命令,如下圖接著按下快捷鍵Ctrl+W;添加菜單項命令響應(yīng)函數(shù)如下圖按照上面標的順序逐個添加函數(shù)接著在view類中添加個私有的成員變量,m_nDrawType來記錄用戶選擇的菜單命令,如下圖接著在view類的構(gòu)造函數(shù)中對其初始化為0;之所以要添加這個參數(shù),目的是當用戶選擇不同的操作時候,我們可以利用switch...case語句來選擇進行用戶的響應(yīng);所以接著要對不同的菜單命令設(shè)置不同的m_nDrawType;如下圖所示分別設(shè)置;畫線畫矩形等,都需要記錄鼠標的起始位置和終止位置,那么我們就需要添加鼠標的位置變量,首先添加一個鼠標的起始位置

2、變量在view類中,m_ptOrigin,這個變量是CPoint類型的數(shù)據(jù)。把他設(shè)置成私有成員;在view類構(gòu)造函數(shù)中將其初始化為0;添加一個鼠標按下消息響應(yīng)函數(shù),如下圖然后編寫該消息響應(yīng)函數(shù),首先將鼠標左鍵按下時的初始坐標位置記錄給m_ptOrigin變量;point是(鼠標的位置)然后繪圖是在鼠標左鍵彈起時候繪圖的,這個應(yīng)該不難想明白的。所以按照添加鼠標左鍵按下響應(yīng)函數(shù)的過程一樣,添加一個鼠標左鍵彈起的消息響應(yīng)函數(shù),然后在里面編寫繪圖程序;第一步,獲取DC第二步,利用switch。。。。Case語句響應(yīng)用戶的菜單命令;首先編寫點的繪圖程序;然后編譯運行一下,沒問題,可以使用如下圖下面編寫繪

3、制線條的程序暫時先不選擇畫筆,讓它默認的來畫線編譯運行,沒問題,如下圖所示下面編寫矩形的程序編譯運行,如下,成功暫時不管這個畫刷的透明與否;繪制橢圓程序編譯運行之后可以下面繪制連續(xù)線條的編程繪制連續(xù)線條的思路是:首先獲得鼠標的起始點,其次要繪制連續(xù)線條的話,那么鼠標移動過程中的每一個點都應(yīng)該要記住的,這個可以利用鼠標移動的WM消息WM_MOUSEMOVE獲取,然后在各點之間連接非常短的線就OK了。然后我們就可以添加一個該消息的響應(yīng)函數(shù)OnMouseMove(),在該函數(shù)中繪圖就行了。過程如下圖所示在里面編寫程序但是有一個問題,就是我們希望在鼠標移動的過程中就繪圖,那么就需要設(shè)置一個if語句來判

4、斷鼠標是否按下,如果按下就開始繪圖,沒有按下就不管了。所以在view類中添加一個BOOL型的私有變量,m_bDraw,當鼠標左鍵按下時候這個值設(shè)置為TRUE,否則為FALSE,初始化的時候給這個值初始化為FALSE;當鼠標左鍵彈起時候為FALSE;在voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint)中即鼠標左鍵按下時給這個值賦值為TRUE;在鼠標左鍵彈起時候給他賦值為FALSE;在voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint)中賦值然后在voidCGraphicView::O

5、nMouseMove(UINTnFlags,CPointpoint)函數(shù)中判斷m_bDraw的值,來繪圖1.獲取客戶區(qū)DC;2.創(chuàng)建一個寬度為1的紅色實線畫筆3.創(chuàng)建一個舊畫筆,將新創(chuàng)建的畫筆選入4.If語句判讀,進行畫圖。。。。。。。。。。。。。。。。。。。注意,這塊兒有個問題出現(xiàn)了,那就是,我們是要在鼠標移動過程中繪圖,將每個點連接起來,那么每連接了兩個點之后,再畫后面的線條的時候起始點就應(yīng)該是上一次畫線的終點才可以,所以需要在if語句中的畫線程序的最后面添加改變起始點坐標。5.恢復(fù)畫刷編譯運行,如下圖所示;連續(xù)線倒是可以畫了,但是其他的功能都不正常了,比如說選擇繪圖里面的點,也是這樣的結(jié)

6、果,查找一下原因,就是,當鼠標移動的時候系統(tǒng)會自動調(diào)用OnMouseMove()這個函數(shù),導致其他的功能都不正常了。然而我們是要讓這個連續(xù)畫線時才啟用這個功能的,所以,我們可以有兩種辦法來解決這個問題,一個是加入if語句,判斷一下m_nDrawType是否為5,一個是用witch。。。Case語句來做第一種辦法如下:編譯運行如下圖各功能都正常,可以用;下面是用witch。。。Case語句來做編譯運行正常,可以用;接下來繪制扇形扇形的繪制,就是初始位置不變,連續(xù)畫線到終點,那么很簡單,只需要把連續(xù)畫線里面的修改初始位置的那句程序刪掉就可以了;程序也寫在OnMouseMove()函數(shù)中;如下圖所示

7、編譯運行,結(jié)果如下所示;下面來解決畫刷的問題。因為之前沒有設(shè)置畫刷的,所以在畫矩形、橢圓的時候,會出現(xiàn)覆蓋的現(xiàn)象,所以現(xiàn)在我們在整個菜單項里面添加一個畫刷菜單項,其中畫刷的選擇項有簡單畫刷、位圖畫刷、透明畫刷。如下圖所示先來創(chuàng)建他們,用CBrush類來創(chuàng)建畫刷對象先創(chuàng)建一個紅色的畫刷1.創(chuàng)建一個紅色畫刷對象2.獲取設(shè)備描述表3.利用紅色畫刷填充所畫矩形區(qū)域,利用FillRect()函數(shù)編譯運行,如

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。