Win32字体资源泄露

Posted

技术标签:

【中文标题】Win32字体资源泄露【英文标题】:Win32 font resource leak 【发布时间】:2011-07-26 18:30:33 【问题描述】:

我有一个 GDI 泄漏的小问题,我想知道有人对如何解决这个问题的看法。假设我有一个包含特定于创建和处理窗口 ex 的数据的类:

class Wnd  
   HWND hWnd;
   HFONT hFont;
   LOGFONT LogFont;
   //etc
public:
   //constructors and member functions
   //The following function atempts to change the font of the window
   //pointed to by the hWnd parameter
   void ChangeFont (const LOGFONT& lf)  
      std::memcpy (&LogFont,&lf,sizeof(LOGFONT));
      hFont=CreateFontIndirect (&LogFont);
      SendMessage (hWnd,WM_SETFONT,(WPARAM) hFont,(LPARAM) 1);
    
   ~Wnd ()  
      //i don't think this would work since i haven't used the SelectObject function
      DeleteObject ((HGDIOBJ) hFont);
    
 ;

所以主要问题是,在销毁时我如何释放分配给 hFont 参数?我是否应该获取窗口的设备上下文并使用 SelectObject () 函数,以便之后我可以释放它调用旧字体的函数并使用 DeleteObject () 来释放内存?非常感谢。

【问题讨论】:

【参考方案1】:

所以主要问题是,在销毁时我如何释放 分配给 hFont 参数的内存?

对于CreateFontIndirect()WM_SETFONT message,每个文档都使用DeleteObject()

我是否应该获取窗口的设备上下文并使用 SelectObject () 函数,以便之后我可以释放它调用该函数 对于旧字体并使用DeleteObject()释放内存?

这应该不是必需的,只要您的绘画例程在使用字体完成例程后以某种方式正确恢复旧字体。

【讨论】:

非常感谢您的回答。

以上是关于Win32字体资源泄露的主要内容,如果未能解决你的问题,请参考以下文章

大改!Windows 11镜像泄露 !

Win10源代码遭泄露,全球数据安全危机风暴来袭

MTaaS 导致资源泄露

什么是内存泄露?内存泄露如何解决?

PHP CURL内存泄露的解决方法

Steam破姐!16TB资源泄露,硬盘炸裂!