MFC为什么要保留原来的CPen, 然后SelectObject
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                MFC为什么要保留原来的CPen, 然后SelectObject
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            OnDraw(CDC× pDC): { CPen aPen; aPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); CPen* pOldPen = pDC->SelectObject(&aPen); //.... pDC->SelectObject(pOldPen); // 為什么要這一句, } 為什么要保留原來的Pen, 每次都會新建...展開
 
{CPen aPen;aPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));CPen* pOldPen = pDC->SelectObject(&aPen);//....pDC->SelectObject(pOldPen);  
}
                        
                        
                        就像這么簡單的情況也得還原成原來的畫筆嗎?
原因有以下幾個:
窗口(視圖)類,在任何地方(包括基礎代碼)都能獲取DC并調整畫筆,你無法確認上次使用的畫筆是否被更換了,因此在每次畫之前要Select
通常畫筆都是使用臨時變量CPen,這樣在函數執行后,這個畫筆會失效,如果不將OldPen放回去,會造成內存泄露(應該釋放但因DC綁定而無法釋放,下次放棄使用的時候又無法判斷是否應該釋放)
如果同樣的畫筆被重復頻繁使用,可以在堆上建一個畫筆指針,這樣能提高效率(具體可以作為View類成員指針變量)
總之,SelectObject(pOldPen)是避免內存泄露的良好編程習慣。
總結
以上是生活随笔為你收集整理的MFC为什么要保留原来的CPen, 然后SelectObject的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: BitBlt和StretchBlt的区别
- 下一篇: MFC中简单绘图几种方式
