版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、窗口中圖形的保存和重繪窗口中圖形的保存和重繪窗口重繪時,調(diào)用窗口重繪時,調(diào)用OnDrawOnDraw函數(shù)的機制函數(shù)的機制 窗口重繪時會發(fā)送窗口重繪時會發(fā)送WM_PAINTWM_PAINT消息,消息,OnDrawOnDraw函數(shù)并不是函數(shù)并不是WM_PAINTWM_PAINT消息響應函數(shù),那么為什么窗口重繪時它會被調(diào)消息響應函數(shù),那么為什么窗口重繪時它會被調(diào)用呢?用呢? 分析基類分析基類CViewCView中響應中響應WM_PAINTWM_PAINT的消息響應函數(shù)的消息響應函數(shù) void CView:OnPaint() / standard paint routineCPaintDC dc(th
2、is);OnPrepareDC(&dc);OnDraw(&dc); 窗口重繪時,調(diào)用窗口重繪時,調(diào)用OnDrawOnDraw函數(shù)的機制函數(shù)的機制 是因為當窗口重繪時,會發(fā)送是因為當窗口重繪時,會發(fā)送WM_PAINTWM_PAINT消息,而我們消息,而我們CMiniDrawViewCMiniDrawView類中沒處理這個消息,會回到基類的消息類中沒處理這個消息,會回到基類的消息處理函數(shù)處理函數(shù)OnPaintOnPaint中,在這個函數(shù)中調(diào)用中,在這個函數(shù)中調(diào)用OnDrawOnDraw函數(shù)。給函數(shù)。給我們的感覺就好像是我們的感覺就好像是OnDrawOnDraw函數(shù)專門用來負責重繪窗口的。函數(shù)專門用
3、來負責重繪窗口的。跟在跟在SDKSDK編程中講過的窗口重繪過程是一致的,只是將重編程中講過的窗口重繪過程是一致的,只是將重繪的過程封裝成幾個函數(shù)了,在繪的過程封裝成幾個函數(shù)了,在OnPaintOnPaint中調(diào)用中調(diào)用OnDrawOnDraw。這個函數(shù)的目的是利用這個函數(shù)給程序員提供一種方便,這個函數(shù)的目的是利用這個函數(shù)給程序員提供一種方便,可以在這進行圖形的繪制??梢栽谶@進行圖形的繪制。 當窗口尺寸發(fā)生變化時,會引起窗口的重繪,發(fā)送當窗口尺寸發(fā)生變化時,會引起窗口的重繪,發(fā)送WM_PAINTWM_PAINT消息。首先是擦除窗口背景,然后引起重繪。消息。首先是擦除窗口背景,然后引起重繪。 如果
4、要讓圖形始終在窗口中出現(xiàn),就需要將繪制的圖如果要讓圖形始終在窗口中出現(xiàn),就需要將繪制的圖形保存起來。當窗口尺寸發(fā)生變化時,再將這個圖形形保存起來。當窗口尺寸發(fā)生變化時,再將這個圖形在窗口中繪制出來。在窗口中輸出圖形,可以在在窗口中繪制出來。在窗口中輸出圖形,可以在OnDrawOnDraw函數(shù)中實現(xiàn)。函數(shù)中實現(xiàn)。因為窗口重繪時,會調(diào)用因為窗口重繪時,會調(diào)用OnDrawOnDraw函數(shù)。函數(shù)。那如何保存圖形呢?那如何保存圖形呢? 在在C+C+中,結(jié)構(gòu)體就是一個類。中,結(jié)構(gòu)體就是一個類。直線的要素是起點和終點。直線的要素是起點和終點。所以可以用一個類的對象來保存圖形的兩要所以可以用一個類的對象來保存
5、圖形的兩要素,這也符合面向?qū)ο蟮某绦蛟O計的特點。素,這也符合面向?qū)ο蟮某绦蛟O計的特點。利用菜單利用菜單InsertInsert插入一個新的類,名字叫插入一個新的類,名字叫CLineCLine,類的,類的類型是類型是GenericGeneric類而不是類而不是MFCMFC類。類。 在類中增加在類中增加2 2個成員變量,設為共有的。個成員變量,設為共有的。 CPoint m_ptOriginCPoint m_ptOrigin,m_ptEnd;m_ptEnd;構(gòu)造一個構(gòu)造一個CLineCLine的對象就可以保存直線的的對象就可以保存直線的2 2要素,提供要素,提供帶參數(shù)的構(gòu)造函數(shù)。帶參數(shù)的構(gòu)造函數(shù)。
6、CLine:CLine(CPoint m_ptOrigin, CPoint m_ptEnd)CLine:CLine(CPoint m_ptOrigin, CPoint m_ptEnd) this-m_ptOrigin=m_ptOrigin;this-m_ptOrigin=m_ptOrigin;this-m_ptEnd=m_ptEnd;this-m_ptEnd=m_ptEnd; 用什么來保存這些直線呢?用什么來保存這些直線呢?數(shù)組?數(shù)組? 鏈表?鏈表?集合類集合類CPtrArray 固定大小固定大小操作復雜操作復雜1. 簡單數(shù)組集合類的構(gòu)造及元素的添加簡單數(shù)組集合類的構(gòu)造及元素的添加 對簡單數(shù)組
7、集合類構(gòu)造的方法都是一樣的,均是對簡單數(shù)組集合類構(gòu)造的方法都是一樣的,均是使用各自的構(gòu)造函數(shù),它們的原型如下:使用各自的構(gòu)造函數(shù),它們的原型如下: CByteArray CByteArray( ); CDWordArray CDWordArray( ); CObArray CObArray( ); CPtrArray CPtrArray( ); CStringArray CStringArray( ); CUIntArray CUIntArray( ); CWordArray CWordArray( ); 使用簡單數(shù)組集合類2. 訪問簡單數(shù)組集合類的元素在在MFC中,既可以使用中,既可以使用G
8、etAt函數(shù),也可使用函數(shù),也可使用“ ”操作符:操作符: / CPtrArray:operator 示例示例 CPtrArray array; CAge* pa; / CAge是一個用戶類是一個用戶類 array.Add( new CAge( 21 ) ); / 添加一個元素添加一個元素 array.Add( new CAge( 40 ) ); / 再添加一個元素再添加一個元素 pa = (CAge*)array0; / 獲取元素獲取元素0 ASSERT( *pa = CAge( 21 ) ); array0 = new CAge( 30 ); / 替換元素替換元素0; ASSERT( *(
9、CAge*) array0 = CAge( 30 ) ); 使用簡單數(shù)組集合類2. 訪問簡單數(shù)組集合類的元素在在MFC中,既可以使用中,既可以使用GetAt函數(shù),也可使用函數(shù),也可使用“ ”操作符:操作符: / CPtrArray:GetAt示例示例 CPtrArray array; array.Add( new CAge( 21 ) ); / 元素元素 0 array.Add( new CAge( 40 ) ); / 元素元素 1 ASSERT( *(CAge*) array.GetAt( 0 ) = CAge( 21 ) ); 使用簡單數(shù)組集合類3. 刪除簡單數(shù)組集合類的元素(1) 使用函
10、數(shù)使用函數(shù)GetSize和整數(shù)下標值訪問簡單數(shù)組集合和整數(shù)下標值訪問簡單數(shù)組集合類中的元素。類中的元素。(2) 若對象元素是在堆內(nèi)存中創(chuàng)建的,則使用若對象元素是在堆內(nèi)存中創(chuàng)建的,則使用delete操操作符刪除每一個對象元素。作符刪除每一個對象元素。(3) 調(diào)用函數(shù)調(diào)用函數(shù)RemoveAll刪除簡單數(shù)組集合類中的所有刪除簡單數(shù)組集合類中的所有元素。元素。使用簡單數(shù)組集合類CPtrArray array;CAge* pa1;CAge* pa2;array.Add( pa1 = new CAge( 21 ) ); array.Add( pa2 = new CAge( 40 ) ); ASSERT(
11、array.GetSize() = 2 );for (int i=0;i array.GetSize() ;i+) delete array.GetAt(i);array.RemoveAll(); 下面代碼過程是一個下面代碼過程是一個CPtrArray的刪除示例:的刪除示例: 利用利用CPtrArrayCPtrArray去存儲去存儲CLineCLine對象的地址對象的地址 (1 1)在視圖類中定義變量)在視圖類中定義變量CPtrArray m_ptArray;(2 2)在)在OnLButtonUpOnLButtonUp中中 CLine line(m_ptOrigin,point); m_ptA
12、rray.Add(&line);(3)在)在OnDraw中,將中,將m_ptArray中保存的圖形取出來重畫中保存的圖形取出來重畫int nCount=m_ptArray.GetSize ();for(int i=0;iMoveTo (CLine *)m_ptArray.GetAt (i)-m_ptOrigin);pDC-LineTo (CLine *)m_ptArray.GetAt (i)-m_ptEnd);當窗口尺寸發(fā)生變化時,當窗口尺寸發(fā)生變化時,圖形沒有在窗口中再次出現(xiàn)圖形沒有在窗口中再次出現(xiàn) ?在OnLButtonUp函數(shù)中函數(shù)中0088:4400CLine line();CLine的對象在棧中的內(nèi)存0088:4400CPtrArray m_ptrArray;m_ptrArray.Add(&line)CLine的對象發(fā)生析構(gòu),內(nèi)存被回收。如何解決這個問題呢?如何解決這個問題呢?在在OnLBut
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源企業(yè)聘用合同范本4篇
- 二零二五年度人工智能輔助軟件服務合同模板2篇
- 二零二五美容院美容護理技術培訓合同3篇
- 《短視頻編?。哼x題構(gòu)想+腳本制作+劇本策劃+鏡頭拍攝》課件 第5章 了解劇本:創(chuàng)作優(yōu)劇本的基礎
- 二零二五年度某局勞務分包結(jié)算與人才培養(yǎng)計劃合同4篇
- 二零二五農(nóng)機綠色生產(chǎn)技術研發(fā)與應用合同4篇
- 二零二五年度棉被品牌授權(quán)生產(chǎn)及銷售合同4篇
- 二零二五年度智能制造名義合伙人合同4篇
- 二零二五版南京海事法院海洋石油開發(fā)合同4篇
- (必會)公路水運工程助理試驗檢測師《交通工程》近年考試真題題庫(含答案解析)
- 中藥材產(chǎn)地加工技術規(guī)程 第1部分:黃草烏
- 危險化學品經(jīng)營單位安全生產(chǎn)考試題庫
- 基于視覺的工業(yè)缺陷檢測技術
- 案例分析:美國紐約高樓防火設計課件
- 老客戶維護方案
- 移動商務內(nèi)容運營(吳洪貴)任務一 用戶定位與選題
- 萬科物業(yè)管理公司全套制度(2016版)
- 2021年高考化學真題和模擬題分類匯編專題20工業(yè)流程題含解析
- 工作證明模板下載免費
- (完整word)長沙胡博士工作室公益發(fā)布新加坡SM2考試物理全真模擬試卷(附答案解析)
- 機械點檢員職業(yè)技能知識考試題庫與答案(900題)
評論
0/150
提交評論