Утечка ресурсов шрифта Win32 - PullRequest
0 голосов
/ 26 июля 2011

У меня есть небольшая проблема утечки GDI, и я хотел бы узнать чье-то мнение о том, как решить эту проблему. Скажем, у меня есть класс, который охватывает данные, специфичные для создания и обработки окна, например:

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 Ответ

2 голосов
/ 26 июля 2011

Итак, главный вопрос: во время уничтожения, как мне выпустить память, выделенная для параметра hFont?

Вы используете DeleteObject() для каждой документации для CreateFontIndirect() и WM_SETFONT сообщения .

Должен ли я получить контекст устройства в окне и использовать SelectObject (), чтобы после этого я мог освободить ее, вызвав функцию для старого шрифта и использовать DeleteObject (), чтобы освободить память?

В этом нет необходимости, если ваша процедура рисования правильно каким-то образом восстанавливает старый шрифт после того, как процедура выполнена со шрифтом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...