freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vc的基本矢量圖形系統(tǒng)的開發(fā)與實現(xiàn)畢業(yè)論文-資料下載頁

2025-01-16 13:21本頁面
  

【正文】 name 中選擇 CDrawView,在 Messages 中選擇 COMMAND,點擊 Add Function,即可為菜單先增加一個響應(yīng)函數(shù)。點擊 Edit 即可在實現(xiàn)文件 中增加消息處理函數(shù)的實現(xiàn)代碼 .操作界面如圖 42 所示:圖 42 MFC ClassWisard獲得圖形元素的唯一識別號:山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院16在一個矢量圖形系統(tǒng)中,對于任何一個圖形元素,必須有一個能夠與其他圖形元素區(qū)分開來的屬性,因此,在此系統(tǒng)中,在 Draw 類中為每類圖形元素創(chuàng)建一個惟一識別號變量 ,在CDrawDoc 中定義一個成員函數(shù) GetGraphID 來實現(xiàn)。具體函數(shù)定義如下:int GetGraphID(short Lb).其中參數(shù) Lb 用來表示圖形類別,具體的實現(xiàn)代碼在 文件中。當單擊標注文本時出現(xiàn)文本對話框如圖 43:圖 43 標注信息窗口當單擊字體參數(shù)時出現(xiàn)的對話框如圖 44:圖 44 標注字體參數(shù) 本章小結(jié)本章主要是對直線、連續(xù)直線及封閉多邊形區(qū)域、圓、圓弧、標注文本等基本的圖形元素的數(shù)據(jù)組織和繪制方法做了簡單的介紹,并對具體的實現(xiàn)過程也做了簡要的概述。對于鼠標繪圖操作的完成提供了有效的方法。山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院17第五章 矢量圖形系統(tǒng)的操作功能 圖形操作菜單管理 增加菜單資源在應(yīng)用程序 Draw 的菜單資源中,增加 “圖形操作”及“圖形選中” 兩個菜單,.并分別在兩個菜單下加入菜單項如圖 51 與圖 52 所示: 圖 51 圖形操作菜單 圖 52 圖形選中菜單 添加消息處理函數(shù)按照 節(jié)中介紹的方法為兩個菜單下的所有菜單項添加消息處理函數(shù)。添加后,可以在視圖類 CDrawView 中找到如下定義:afx_msg void OnGraphRedraw()。afx_msg void OnGraphZoom()。afx_msg void OnGraphSmall()。afx_msg void OnGraphPan()。afx_msg void OnGraphUp()。afx_msg void OnGraphFirst()。山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院18afx_msg void OnGraphAll()??梢栽谝晥D類 中找到如下定義:ON_COMMAND(ID_GRAPH_REDRAW, OnGraphRedraw) //圖形重畫ON_COMMAND(ID_GRAPH_ZOOM, OnGraphZoom) //圖形放大ON_COMMAND(ID_GRAPH_SMALL, OnGraphSmall) //圖形縮小ON_COMMAND(ID_GRAPH_PAN, OnGraphPan) //圖形搖動ON_COMMAND(ID_GRAPH_UP, OnGraphUp) //重畫上屏ON_COMMAND(ID_GRAPH_FIRST, OnGraphFirst) //重畫首屏ON_COMMAND(ID_GRAPH_ALL, OnGraphAll) //重畫全屏ON_COMMAND(ID_SELECT_MOUSE, OnSelectMouse) //圖形選中ON_COMMAND(ID_SELECT_CLEAR, OnSelectClear) //放棄選中ON_COMMAND(ID_SELECT_DELETE, OnSelectDelete) //刪除選中圖形 圖形操作的具體實現(xiàn) 圖形重畫所謂圖形重畫,就是把當前視圖屏幕重新繪制一次,實際上也就是讓視圖類的函數(shù) OnDraw(CDC* pDC) 重新執(zhí)行一次。根據(jù)需要重畫區(qū)域的不同,圖形重畫可以分為全屏重畫和局部重畫。⑴ 全屏重畫在有些情況下,需要將當前視圖屏幕全屏重畫。全屏重畫有兩種方法,一種是使用函數(shù) UpdateAllViews,使屬于當前文檔對象的所有視圖重畫。另外一種方法即是用函數(shù) Invalidate,使當前視圖屏幕的客戶區(qū)失效,從而激活圖形重畫。兩種方法的不同點為:Invalidate 函數(shù)它只能使當前視圖重畫,而與其同文檔的其他視圖并不重畫。對視圖類 CDrawView 的 OnGraphRedraw 函數(shù)進行修改。具體代碼如下:Void CDrawView::OnGraphRedraw(){CDrawDoc* pDoc=GetDocument()。pDocUpdateAllViews(this)。Invalidate()。}OnGraphRedraw 函數(shù)首先得到指向當前文檔對象的指針,然后調(diào)用UpdateAllViews 函數(shù)重畫此文檔對象所有的視圖,參數(shù) this 是指向當前視圖對象的指針。山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院19⑵ 局部重畫如果只希望將當前視圖屏幕的一部分區(qū)域重畫,即進行局部重畫。在 VC++中,Invalidate 與 RectInvalidateRgn 兩個函數(shù)可以完成此功能。兩個函數(shù)的定義如下:Void InvalidateRect(LPCRECT lpRect ,BOOL bErase=TRUE)。 // lpRect 中存儲著視圖中需要重畫的區(qū)域,參數(shù) bErase 用于指定當區(qū)域重畫時,背景是否擦除 void InvalidateRgn(CRgn* pRgn, BOOL bErase=TRUE)。 圖形放大和移動 1. 圖形放大圖形放大指的是通過調(diào)整視圖屏幕,使當前視圖屏幕中的一部分區(qū)域放大顯示到整個視圖屏幕中[15]。矢量圖形系統(tǒng)應(yīng)具有無級放縮的功能。所謂“無級” ,指的是圖形能以任何的比例進行顯示。在應(yīng)用程序 Draw 已經(jīng)建立的坐標系基礎(chǔ)上,可以很容易實現(xiàn)圖形的無級放大。實現(xiàn)圖形放大的操作方法很多:如可以進行固定比例的圖形放大;再如可以通過窗口放大。本設(shè)計將涉及到用窗口放大圖形的操作方法和具體實現(xiàn)步驟。在此基礎(chǔ)上,可以輕而易舉的實現(xiàn)其他方法的圖形放大操作功能。實現(xiàn)圖形放大、移動后的效果圖分別如圖 5圖 54 所示:圖 53 圖形繪制(放大前)山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院20圖 54 圖形繪制(放大后)2. 圖形移動圖形移動指的是將圖形元素在橫向和縱向上移動一定的偏移量,得到移動后圖形元素的坐標。圖形移動操作功能的機理非常簡單,只需將各類圖形元素的特征點做相應(yīng)的坐標移動即可。⑴ 各類圖形元素的移動操作為了實現(xiàn)圖形元素的移動功能,同樣需要在圖形元素基類 CDraw 中定義一個純虛函數(shù):virtual void Move(float x_Move ,float y_Move )=0。 在各個圖形元素類中增加這個虛函數(shù)的重載定義,在各個圖形元素類的實現(xiàn)文件中,加入這個重載函數(shù)的實現(xiàn)代碼。⑵ 實現(xiàn)圖形移動操作功能圖形移動功能的操作步驟如下:首先用“鼠標點中”操作選中要移動的圖形元素,按下鼠標左鍵點中移動操作的基點,再按下鼠標左鍵點中移動操作的目標點,各個圖形元素將以這兩個點為基礎(chǔ)進行相對移動。在 OnEditMove 函數(shù)中,對圖形移動操作進行了標識,為了實現(xiàn)具體的移動操作,需要對各個鼠標消息處理函數(shù)進行修改。在實現(xiàn)文件 的消息處理函數(shù)OnLButtonDow、OnMouseMoven、OnRButtonDown 中加入相應(yīng)的實現(xiàn)代碼。圖形移動的效果圖如圖 5圖 56 所示:圖 55 圖形繪制(移動前)山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院21圖 56 圖形繪制(移動后) 重畫上屏和重畫首屏圖形經(jīng)過放大、移動操作后,還要有把圖形屏幕再恢復(fù)到前一屏幕(重畫上屏)或者直接使圖形回到第一屏(重畫首屏)的功能。要實現(xiàn)重畫上屏和重畫首屏的功能,就需要記錄下每一屏幕的狀態(tài),并時刻跟蹤著當前的狀態(tài)。記錄屏幕狀態(tài):一個圖形屏幕是由三個參數(shù)來確定的:屏幕左下角原點的坐標m_xStart、m_yStart 和顯示比例 blc,在文檔類 CDrawDoc 中定義一個結(jié)構(gòu)數(shù)組來存儲歷史圖形屏幕。在 CDrawDoc 類中定義以下幾個變量:Public:int m_CurrentScreen。 //當前屏幕的序號int m_MaxScreen。 //最多能存儲的屏幕數(shù)ScreenStruct* m_Screen。 //記錄屏幕參數(shù)的結(jié)構(gòu)數(shù)組結(jié)構(gòu) ScreenStruct 在頭文件 中 CDrawDoc 類定義前定義:Typedef struct{Float blc。 //顯示比例Float sx。 //屏幕左下角橫坐標Float sy。 //屏幕左下角縱坐標}ScreenStruct。在文檔類 CDrawDoc 中定義一個函數(shù),來完成存儲一個圖形屏幕狀態(tài)的操作功能:Public:Void AddScreen(float StartX, float StartY, float blc)。在實現(xiàn)文件 中,加入函數(shù)的實現(xiàn)代碼。⑴ 重畫上屏要實現(xiàn)重畫上屏操作功能,只需把 m_CurrentScreen 的值減去 1,從結(jié)構(gòu)數(shù)山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院22組 m_Screen 中取出屏幕參數(shù)重畫圖形即可。在實現(xiàn)文件 中,將“重畫上屏”菜單項的消息處理函數(shù) OnGraphUp 的實現(xiàn)代碼修改如下:void CDrawView::OnGraphUp() {CDrawDoc* pDoc=(CDrawDoc*)GetDocument()。if(pDocm_CurrentScreen0)//如果當前不是首屏,當前圖形屏幕序號減1pDocm_CurrentScreen。 //得到上一屏幕的圖形參數(shù)并重畫圖形m_xStart=p_Screen[pDocm_CurrentScreen].sx。m_yStart=p_Screen[pDocm_CurrentScreen].sy。blc=p_Screen[pDocm_CurrentScreen].blc。Invalidate()。 //重畫圖形}p_Screen 是 CDrawView 類中定義的指向文檔對象中的結(jié)構(gòu)數(shù)組 m_Screen的指針,它在 視圖類 CDrawView 中定義ScreenStruct *p_Screen。在實現(xiàn)文件 中,在重載的虛函數(shù) OnActiveView 中對 p_Screen進行初始化,將它指向當前文檔對象中的結(jié)構(gòu)數(shù)組 m_Screen:void CDrawView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) {p_View=this。CDrawDoc* pDoc=(CDrawDoc*)GetDocument()。p_Screen=pDocm_Screen。CView::OnActivateView(bActivate, pActivateView, pDeactiveView)。}⑵ 重畫首屏對于重畫首屏功能來說,只要取出存儲在結(jié)構(gòu)數(shù)組 m_Screen 中的首屏參數(shù),并對視圖重畫即可。修改實現(xiàn)文件 中的消息處理函數(shù)OnGraphFirst,得到實現(xiàn)代碼如下:void CDrawView::OnGraphFirst() //重畫首屏{// TODO: Add your mand handler code here山東凱文科技職業(yè)學(xué)院山東凱文科技職業(yè)學(xué)院23CDrawDoc* pDoc=GetDocument()。if(pDocm_CurrentScreen==0)return 。m_xStart=p_Screen[0].sx。m_yStart=p_Screen[0].sy。blc=p_Screen[0].blc。pDocAddScreen(m_xStart,m_yStart,blc)。Invalidate()。} 顯示全圖在矢量圖形系統(tǒng)中,隨著一些圖形元素通過外部接口或者系統(tǒng)本身的繪制功能的加入,圖形首屏可能包含不了所有的圖形元素;還有一種情況是,圖形中所有的圖形元素都在視圖屏幕的一個角上,只占圖幅的一小部分。這是就需要一個操作功能,調(diào)整視圖屏幕左下角原點的實際坐標(m_xStart , m_yStart)和顯示比例 blc,使所有的圖形元素正好能夠繪制到視圖屏幕中(在屏幕上留有一部分邊界區(qū)域) ,顯示全圖功能就是為完成此功能而設(shè)置的。實現(xiàn)顯示全圖功能的思路是,通過得到每一類圖形元素(如直線、連續(xù)直線)的邊界矩形,然后根據(jù)視圖屏幕的大?。ㄟ壿嬜鴺耍┻M行計算,得到屏幕的參數(shù)m_xStart,m_yStart,解決問題的關(guān)鍵在于得到各類圖形元素的邊界矩形。各類圖形元素的邊界矩形計算:在圖形元素基類 CDraw 中定義一個純虛函數(shù):Virtual void GetRect(float *minx,float *minY, float *maxX,float *maxY)=0。函數(shù) GetRect 用來計算圖形元素的邊界矩形, ( *minX ,*minY)和 (*maxX , *maxY )這四個指針參數(shù)用來返回邊界矩形的最小和最大坐標。在由 CDraw 類派生的各個圖形元素類中重載虛函數(shù) GetRect,即在各個類中加入以下定義代碼:Virtual void GetRect(float *minx,float *minY, flo
點擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1