這幾天在嘗試C語言用Win32 API寫個小程序,有個函數是要在指定位置顯示一串數字,爲了圖省事,把 CreateFontIndirect 放在 SelectObject 裏了,代碼是這樣的: 小程序
SelectObject(hdc, CreateFontIndirect(&logfont) ); SetTextColor(hdc, RGB(0,0,0)); SetBkMode(hdc, TRANSPARENT); DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
開始運行沒問題,但是在這個函數執行了142次後字體變成另一種了。試了N次,很準確的是第142次忽然變了。
琢磨琢磨後想到:是否是字體只建立沒釋放?
修改代碼以下:
函數
HFONT f = CreateFontIndirect(&logfont); SelectObject(hdc, f); SetTextColor(hdc, c); SetBkMode(hdc, TRANSPARENT); DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); DeleteObject(f);
運行正常。
字體
原來想的是這是個子函數,調用的時候建立字體,函數結束後會自動釋放。
實際上函數結束並無自動釋放,因此在第142次調用後字體資源耗盡了。code