日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC为什么要保留原来的CPen, 然后SelectObject

發布時間:2024/9/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。