这几天在尝试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