【转】pDc-SelectObject(pOldBrush)恢复画刷
生活随笔
收集整理的這篇文章主要介紹了
【转】pDc-SelectObject(pOldBrush)恢复画刷
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請看下面的代碼: CDC *pDc=new CClientDC(this); CBrush brush; brush.CreateSolidBrush(RGB(0,255,0)); CBrush *pOldBrush = pDc->SelectObject(&brush); pDc->Rectangle(50,50,200,200); pDc->SelectObject(pOldBrush); delete pDc; 比較困惑的是pDc->SelectObject(&brush);將刷子選入dc中,返回了一個CBrush類型的指針pOldBrush ,為什么在畫完矩形之后,還要有pDc->SelectObject(pOldBrush);這么一條語句呢?怎么還要把pOldBrush 指針也選入dc中呢?書上解釋說是恢復原來的畫刷,暈~我這畫刷也沒改變啊,恢復個什么呢? ................. CBrush *pOldBrush = pDc->SelectObject(&brush);?? 將brush自己定義的brush畫刷選入dc中,此時dc就可以使用我們自己定義的brush畫刷進行作業。 同時pDc->SelectObject(&brush)方法返回一個指針,該指針實際上是未引入brush之前dc中的缺省指針,這里我們將這個缺省指針返回了,并將之賦值為CBrush類型的,也就是pOldBrush 指針就是這個缺省指針。 在我們作業完成后,不能將dc中的brush消除掉,如果我們使用delete方法直接刪除掉brush對象的話,也就是說brush對象沒有了 但dc中仍保留了原先brush對象的句柄,這是不正確的,也是容易出問題的,因此我們要將dc中的brush的句柄給消除掉,怎么消除掉呢?我們知道 句柄實際上應該是個指針,我們只需要將dc中原先的brush指針替換掉就好了,就好比,只有一個位置,我要進來,你必須離開。那么現在就是brush的句柄要走,誰接替之呢?恰好是剛才被pDc->SelectObject(&brush)這個語句返回的默認指針,也就是pOldBrush ,還是由它來回歸正統的好~所以,理所當然的要再將之選入到dc中了,也就有了語句pDc->SelectObject(pOldBrush); 這樣以來dc中的brush句柄被沖刷掉了,如果delete brush的話 也不會在有句柄未被釋放掉這樣的煩惱了,因此,也就不會造成內存泄露的問題了。 CBrush *pOldBrush = pDc->SelectObject(&brush);中pOldBrush指向的是select之前的系統畫刷或者其它畫刷,并不是當前使用的brush,因此使用完畫刷使用pDc->SelectObject(pOldBrush);恢復到初始狀態。 ? 轉載自:http://blog.sina.com.cn/s/blog_a2aa00d7010190zd.html
轉載于:https://www.cnblogs.com/zhanjxcom/p/4442443.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【转】pDc-SelectObject(pOldBrush)恢复画刷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12焦耳玩具枪能定性枪支吗
- 下一篇: 深入理解html5系列-文本标签