Static컨트롤에 색상을 입히는 것 까지는 좋으나, 다이얼로그를 계속 생성하거나

폰트사이즈를 지정해줄 경우, 1회성으론 관계가 없다.

하지만, 여러번 다이얼로그를 불러온다던가 하면서

SetFontSize 메소드를 계속 불러올 경우

에러를 토해내는데, 생각보다 단순한 문제였다.

우선, ColotStaticST의 함수 부분을 살펴보면

void CColorStaticST::SetFontSize(int nHeight, int nWidth, BOOL bold)
{
 CFont* pFont  = NULL;
 LOGFONT LogFont;

 pFont   = GetFont();
 pFont->GetLogFont(&LogFont);

 if(nHeight > 0)
 {
  LogFont.lfHeight = nHeight;
 }

 if(nWidth > 0)
 {
  LogFont.lfWidth  = nWidth;
 }
 
 if(bold)
 {
  LogFont.lfWeight = FW_BOLD;
 }

 m_pFont->CreateFontIndirect(&LogFont);

 SetFont(m_pFont);

 Invalidate();
}

자 무엇이 문제인지 알겠는가.

 m_pFont->CreateFontIndirect(&LogFont);

이부분에서 에러가 발생하게 된다.

즉, 반복적으로 불러올 경우, 불러오는 만큼 오브젝트를 계속 생성하려 들기 때문인데

여러가지 해결 방법이 있을 수 있겠지만 본인은 이렇게 해결했다. (사실 좀 무식하게 해결한..)

m_cStStatus.m_pFont->DeleteObject();

해당 컨트롤에 대한 변수를 선언하고 (CColorStaticST m_cStStatus; 등..)

CColorStaticST가 가지고 있는 멤버변수인 m_pFont 에 직접 DeleteObject() 를 수행케 함으로써 해결했다.

.... 아 쓰고나니 진짜 개무식하네-_-

by PrettyNaru 2009.09.18 09:47
| 1 2 3 4 5 6 7 8 9 10 |