激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月


主題:EM9170:雙緩沖文字輸出老是出問題,幫看看

  共有46734人關注過本帖    
帥哥喲,離線,有人找我嗎?
shepher
1樓 信息 | 搜索 | 郵箱


加好友 發短信
EM9170:雙緩沖文字輸出老是出問題,幫看看  發帖心情 Post By:2012-11-18 10:51:00   [只看該作者]

最近做一個監控界面,需要使用大字體刷新測量數據,出現故障時需要將字色變為紅色

我定義了一個CColorStatic類
在OnPaint中寫的輸出

CPaintDC dc(this);
CDC m_hdcMem;
CBitmap m_hBitmap;

if (m_hdcMem.CreateCompatibelDC(NULL) == 0)
{
    m_hdcMem.DeleteDC();
    return;
}

CRect rect;

GetClientRect(&rect);

if (m_hBitmap.CreateCompatibleBitmap(&dec, Rect.Width() + 1, rect.Height() + 1) == 0)
{
    m_hBitmap.DeleteObject();
    m_hdcMem.DeleteDC();
    return;

}

CBitmap * m_hOldBMP = m_hdcMem.SelectObject(&m_hBitmap);

CString strText = _T("");
GetWindowText(strText);
....

m_hdcMem.FillRect(&rect, m_pBrush);//填充黑色
CFont * m_hOldFont = m_hdcMem.SelectObject(&m_font); //使用大字體
m_hdcMem.SetTextColor(m_rgbText);
m_hdcMem.SetBkMode(TRANSPARENT);
m_hdcMem.DrawText(strText, rect, nFormat); 
//nFormat是設置文字左中右的,用的DWORD dwStyle = GetStyle()

dc.BitBlt(0, 0, rect.Width(), rect.Height(), &m_hdcMem, 0, 0, SRCCOPY);

m_hdcMem.SelectObject(m_hOldFont);

m_hdcMem.SelectObject(m_hOldBMP);
m_hBitmap.DeleteObject();
m_hdcMem.DeleteDC();


界面上有10個CColorStatic控件需要刷新,刷新頻率為1秒一次
發現程序運行后,開頭30秒左右內存使用一直沒問題,之后大約4秒左右
程序使用內存增加4K的樣子,時間久了之后,如果打開其他功能界面,
就會出現一些CColorStatic框變成了其他功能界面的圖形,且在也不能刷新了

在調試過程中試過將刷新的timer禁用,內存一直不會增長。
試過將BitBlt這一句注釋,發現內存也不會增長。。。。。!!!

現在就不知道是哪兒的問題了。

高手幫看看


  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
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);更新時不擦除背景。
或者不要重寫這個消息的處理函數,就不會出問題了。

  單帖管理 | 引用 | 回復 回到頂部

返回首頁

EM9170:雙緩沖文字輸出老是出問題,幫看看

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 91自产国偷拍在线| 国产一区二区三区久久| jizzjizz日本护士| 久久久久久久久女黄9999| 亚洲国产高清视频在线观看 | 国产高清网站| 亚洲三级精品| 亚洲精品tv久久久久久久久久| 国产va精品免费观看| 国产精品福利视频主播真会玩| 九草在线视频| 亚洲日韩欧美视频| fc2成年免费共享视频网站| 在线观看222www| 国产在线一二三区| 96精品专区国产在线观看高清 | 情趣视频网站视频在线观看| 欧美精品亚洲精品日韩专| 99久久精品国产片久人| 尤物视频www| 日韩四区| 男人午夜免费视频| 国产免费三a在线| 国产精品视频播放| 美女黄色在线观看| 国产大秀视频一区二区三区 | 一级福利片| 久久夜色精品| 日本无翼乌邪恶大全彩h邪恶师 | 一级全黄男女免费大片| 久久草精品视频| 久久婷婷五色综合夜啪| 日本最黄视频| 亚洲精品亚洲人成在线观看麻豆| 免费一级黄色片| 免费观看www视频| 青草伊伊| 免费一级 一片一毛片| 免费的一极毛片在线播放| 免费爱爱| 成年性网站|