麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

定位MFC程序GDI對(duì)象泄漏過程中的一些經(jīng)驗(yàn)

2019-11-14 12:34:45
字體:
供稿:網(wǎng)友

定位MFC程序GDI對(duì)象泄漏過程中的一些經(jīng)驗(yàn)

之前接觸MFC比較少,最近一個(gè)程序需要使用MFC寫界面。寫完之后發(fā)現(xiàn)程序運(yùn)行一段時(shí)間后異常卡頓,并且Win7系統(tǒng)任務(wù)欄圖標(biāo)出現(xiàn)一些毛邊等異常情況。重新運(yùn)行程序,打開任務(wù)管理器發(fā)現(xiàn)GDI對(duì)象不斷增加,且數(shù)量到達(dá)9999后程序開始異常。因此判斷程序可能存在GDI對(duì)象泄漏,即創(chuàng)建的GDI對(duì)象沒有及時(shí)釋放。 鑒于GDI對(duì)象不斷自動(dòng)增加,判斷GDI泄漏可能位于定時(shí)器觸發(fā)的OnTimer函數(shù)中。OnTimer函數(shù)調(diào)用方法如下:

LRESULT CVServerView::OnChangeTime(WPARAM wParam, LPARAM lParam) { CString strText; FormatTime((INT)wParam, 30, strText); m_editPush.SetWindowText(strText); return 0; }

可以看出函數(shù)僅僅是調(diào)用了API函數(shù)SetWindowText,理論上不應(yīng)該導(dǎo)致GDI泄漏。但奇怪的是注釋掉SetWindowText后程序就正常了。后來發(fā)現(xiàn)原因在于程序重寫了OnCtlColor函數(shù)。

HBRUSH CVServerView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (pWnd->GetDlgCtrlID() == IDC_EDIT_PUSH) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255, 255, 255)); return HBRUSH(CreateSolidBrush(RGB(56, 56, 56))); } // TODO: 如果默認(rèn)的不是所需畫筆,則返回另一個(gè)畫筆 return hbr;}

SetWindowText函數(shù)會(huì)調(diào)用以上OnCtlColor函數(shù)。OnCtlColor中CreateSolidBrush創(chuàng)建了GDI對(duì)象沒有釋放導(dǎo)致GDI對(duì)象不斷增加,這就是問題所在。因此將程序修改為創(chuàng)建一個(gè)全局畫筆m_brushBack=CreateSolidBrush(RGB(56, 56, 56)),OnDestroy時(shí)釋放掉。修改代碼如下:

HBRUSH CVServerView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (pWnd->GetDlgCtrlID() == IDC_EDIT_PUSH) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255, 255, 255)); return HBRUSH(m_brushBack); } // TODO: 如果默認(rèn)的不是所需畫筆,則返回另一個(gè)畫筆 return hbr;}

回頭再看,問題很簡(jiǎn)單并且出現(xiàn)在細(xì)節(jié)地方,主要原因在于自己對(duì)GDI對(duì)象管理了解太少,隨意創(chuàng)建GDI對(duì)象不及時(shí)釋放。以此提醒自己需要牢記GDI對(duì)象創(chuàng)建及釋放問題。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色免费大片 | 亚洲一区二区在线免费 | 秋霞a级毛片在线看 | 成人午夜在线播放 | 狠狠撸电影 | 精品国产一区二区在线 | 一区二区三区黄色 | 久久艹一区 | 九九综合九九 | 在线99热 | 亚洲欧美一区二区三区在线观看 | 国产免费一区视频 | 午夜视| 精品中文字幕在线观看 | av在线免费观看网 | 亚洲性视频 | 国产成人强伦免费视频网站 | 国产精品自在线拍 | 日本羞羞影院 | 日韩色电影 | 色播视频在线播放 | 国产精品99久久久久久久女警 | 激情综合网俺也去 | 欧美在线 | 亚洲 | 热99热| 中文字幕在线观看精品 | 久章草在线视频 | 国产精品热| 国产91丝袜在线播放 | 色综合久久久久久久久久久 | 国产黄色网页 | 777zyz色资源站在线观看 | 久久久久久久久久久一区 | 色97在线| 欧美性激情视频 | 小视频免费在线观看 | 久久综合久久综合久久综合 | 久久精品在线免费观看 | 久久国产精品久久久久久久久久 | 国产色爱综合网 | 国产美女做爰免费视 |