Win32字体资源泄漏

时间:2011-07-26 18:30:34

标签: winapi

我有一个小问题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 个答案:

答案 0 :(得分:2)

  

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

您对DeleteObject()CreateFontIndirect()的每个文档使用WM_SETFONT message

  

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

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