上次說繪圖出現問題的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.
沒有留言:
張貼留言
(什麼是留言欄訊息?)