我是否需要对从 SystemParametersInfo() 检索到的字体调用 DeleteObject()?

Jac*_*ack 1 windows winapi fonts memory-management

我得到的系统默认字体是这样的:

NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
HFONT hFont = CreateFontIndirect(&ncm.lfMessageFont);
Run Code Online (Sandbox Code Playgroud)

然后

更改控件的字体如下:

SendMessage(hwnd, WM_SETFONT, (WPARAM) hFont, TRUE);
Run Code Online (Sandbox Code Playgroud)

我的问题是,既然这个字体是由 检索的SystemParametersInfo(),我是否需要用 删除它DeleteObject()?我不确定操作系统拥有该内存,因此我不需要释放它。

IIn*_*ble 5

SystemParametersInfo返回LOGFONT结构。这些结构不需要被释放。

创建字体(从 aLOGFONT或其他字体)使您负责资源清理。这里的字体对象不是由SystemParametersInfo,而是由调用创建的CreateFontIndirect