咱們在設置字體、畫刷等等時,都會在設置時保存舊字體、舊畫刷的指針。在使用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);