主題:EM9170:雙緩沖文字輸出老是出問題,幫看看 共有46736人關注過本帖 |
---|
shepher |
1樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
EM9170:雙緩沖文字輸出老是出問題,幫看看 Post By:2012-11-18 10:51:00 [只看該作者]
最近做一個監控界面,需要使用大字體刷新測量數據,出現故障時需要將字色變為紅色 m_hdcMem.SelectObject(m_hOldFont); m_hdcMem.SelectObject(m_hOldBMP); |
單帖管理 | 引用 | 回復 |
yy |
2樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2012-11-19 10:28:00 [只看該作者]
光這段代碼沒看出有什么問題,也與內存無關。OnPaint是當窗口刷新時才會調用,一般是窗口顯示或者頂層遮擋的窗口移動的時候才行。你這個情況感覺OnPaint根本沒有被調用到,你的timer里是怎么刷新窗口的呢?用Invalidate?要不你去掉部分控件窗口,然后在OnPaint里面設個斷點,然后看看出問題時這個OnPaint到底調用到沒有。
|
單帖管理 | 引用 | 回復 |
yy |
3樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2012-11-21 13:43:00 [只看該作者]
看了你的代碼,發現只要使用了自定義控件,在刷新控件的時候就可能會4kb,4kb這樣增加占用的內存,當增加到一定程度后就會開始有釋放,然后穩定在一個位置,估計是GDI的一個機制吧,不是你代碼的問題,關閉窗口后過一會這部分內存就釋放了,不會影響到應用,你可以通過設置將用戶使用內存再設大些。
[此貼子已經被作者于2012-11-21 13:43:40編輯過]
|
單帖管理 | 引用 | 回復 |
yy |
4樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2012-11-22 11:05:00 [只看該作者]
恩,這個問題算解決了。
如果自定義控件,并且重寫了ON_WM_ERASEBKGND的處理函數,擦背景時就容易導致4kb的內存占用,所以只有使用Invalidate(FALSE);更新時不擦除背景。 或者不要重寫這個消息的處理函數,就不會出問題了。
|
單帖管理 | 引用 | 回復 |