可怕的繪圖資源異常Bug
¶可怕的繪圖資源異常Bug
原文連結: https://darkblack01.blogspot.com/2012/01/bug.html
移植時的最後更新日期: 2012-01-29T18:37:01.400+08:00
上次說繪圖出現問題的bug
抓到了!
真是發生奇蹟了!
奇蹟指的是,我竟然看出來(或者想得到)問題在這個方向…
而不是專注在某一段語法產生的問題。
因為TextOut是正常的,所以仔細觀察發現CBrush和CPen重繪次數超過一定的數量(很大的數量)就會崩潰,和它們被DeleteObject一樣
而不是專注在某一段語法產生的問題。
因為TextOut是正常的,所以仔細觀察發現CBrush和CPen重繪次數超過一定的數量(很大的數量)就會崩潰,和它們被DeleteObject一樣
所以,就針對這兩個物件做檢查,並且上網看看人家都怎麼做的…
發現…
Pen 部份
OldPen = dc.SelectObject(NewPen);
(繪圖)
dc.SelectObject(OldPen);
Brush的部份
m_brBack.DeleteObject();
m_brBack.CreateSolidBrush(RGB(255,255,0));
m_brBack.CreateSolidBrush(RGB(255,255,0));
做了
1. 儲存預設
1. 儲存預設
2. 新的筆或筆刷替代預設
3. 繪圖
4. 再將預設值替代新的筆或筆刷
的動作
程式的繪圖就不會因為次數太多,而失控。
因為我用 MFC寫了UI介面動畫,所以要快速且大量的更新畫面
才會出現這樣的問題。
哈哈~~
哈哈~~
我原本的寫法是如下,單純的只是將它設定而已。
Pen 部份
dc.SelectObject(NewPen);
(繪圖)
Brush的部份
m_brBack.CreateSolidBrush(RGB(255,255,0));
大神回覆:
You need to make sure the graphic resources such as Pen and Brush are released ( by calling DeleteObject )after you are done with them.
Otherwise, you might run out of resource quickly. This also explain why when WM_PAINT is not called, you don’t see this problem.
Suggestion:
Add some code to keep track the graphic resource allocation/deallocation count to see if they are equal.
If they are not, force your program to stop (by adding an assertation), that way you could easily spotting resource leakage.
發表於
tags:
{ WIN32 API/MFC }