2011-07-26 3 views
0

내가 GDI 누수의 작은 문제가 새어 나는 윈도우 전 생성 및 처리에 특정 데이터를 enfolds 클래스가 this.Say 해결하는 방법에 대한 다른 사람의 의견을 알고 싶어 :에서 Win32 글꼴 자원

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() 사용합니까? 고마워요.

답변

2

그래서 가장 중요한 질문은 파괴시에 메모리를 hFont 매개 변수에 할당하는 방법입니다.

당신은 CreateFontIndirect()WM_SETFONT message에 대한 설명서 당 DeleteObject()를 사용합니다.

내가 윈도우의 장치 문맥을받을 수 있도록 그 후에 내가 DeleteObject 매크로를 이전 글꼴 기능 를 호출을 해제하고 사용할 수 있도록 SelectObject 매크로 () 함수를 사용해야합니다() 메모리를 해제하는?

그리기 루틴이 글꼴로 루틴을 완료 한 후에 어떻게 든 이전 글꼴을 올바르게 복원하는 한 필요하지는 않습니다.

+0

답변 해 주셔서 감사합니다. –