资源建立了用完后必定要释放

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

相关文章
相关标签/搜索