MFC 關於使用CDC::SelectObject遇到的問題

咱們在設置字體、畫刷等等時,都會在設置時保存舊字體、舊畫刷的指針。在使用CDC以後,經過設置回舊字體釋放GDI資源,防止資源泄漏。 可是我在Visual Studio 2015環境中,使用下面的錯誤寫法,是不會報錯的:字體

CPaintDC dc(this);
CFont font;
CFont* pOldFont = dc.SelectObject(font);

也就是在SelectObject的參數中輸入的不是指針類型。此時調用的方法是 HGDIOBJ CDC::SelectObject(HGDIOBJ); 經過這個方法返回的指針在從新設置時會出錯。this

輸入圖片說明

經過調試發現,若是不使用指針類型,返回的pOldFont中一個m_pObject顯示爲「????」,這會致使在設置舊字體是失敗。因此在使用CDC::SelectObject(),要傳入指針類型。指針

CPen* SelectObject( CPen* pPen);
CBrush* SelectObject(CBrush* pBrush);
virtual CFont* SelectObject(CFont* pFont);
CBitmap* SelectObject(CBitmap* pBitmap);
int SelectObject(CRgn* pRgn);
CGdiObject* SelectObject(CGdiObject* pObject);
相關文章
相關標籤/搜索