У меня есть небольшая проблема утечки 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 (), чтобы освободить память? Большое спасибо.