CRichEditCtrl 기본 글꼴 변경하기
아래와 같은 코드를 View클래스의 OnCreate 함수에 아래와 같은 글꼴 변수 함수를 수행하도록 한다.
[CODE type=cpp]void ChangeFont(CString strFont, int iFontSize)
{
CHARFORMAT2 cf;
CRichEditCtrl &ctrlRich = GetRichEditCtrl();
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwMask = // CFM_CHARSET
CFM_FACE
| CFM_SIZE
| CFM_OFFSET
| CFM_COLOR
| CFM_PROTECTED
;
cf.dwEffects = CFE_PROTECTED;
// 데스크탑 모니터와 노트북 모니터의 픽셀 크기를 맞추기 위함
cf.yHeight = MulDiv( iFontSize,GetDeviceCaps(::GetDC(HWND_DESKTOP),LOGPIXELSY),72);
cf.yHeight *= (1440 / GetDeviceCaps(::GetDC(HWND_DESKTOP),LOGPIXELSY));
cf.wWeight = FW_NORMAL;
cf.yOffset = 0;
cf.crTextColor = RGB(255, 0, 0);
// cf.bCharSet = JOHAB_CHARSET; 5시간 헤매게 한 코드
cf.bPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
strcpy( cf.szFaceName, strFont );
// 기본 폰트 변경
ctrlRich.SetDefaultCharFormat ( cf );
}[/CODE]
{
CHARFORMAT2 cf;
CRichEditCtrl &ctrlRich = GetRichEditCtrl();
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwMask = // CFM_CHARSET
CFM_FACE
| CFM_SIZE
| CFM_OFFSET
| CFM_COLOR
| CFM_PROTECTED
;
cf.dwEffects = CFE_PROTECTED;
// 데스크탑 모니터와 노트북 모니터의 픽셀 크기를 맞추기 위함
cf.yHeight = MulDiv( iFontSize,GetDeviceCaps(::GetDC(HWND_DESKTOP),LOGPIXELSY),72);
cf.yHeight *= (1440 / GetDeviceCaps(::GetDC(HWND_DESKTOP),LOGPIXELSY));
cf.wWeight = FW_NORMAL;
cf.yOffset = 0;
cf.crTextColor = RGB(255, 0, 0);
// cf.bCharSet = JOHAB_CHARSET; 5시간 헤매게 한 코드
cf.bPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
strcpy( cf.szFaceName, strFont );
// 기본 폰트 변경
ctrlRich.SetDefaultCharFormat ( cf );
}[/CODE]
아마 이렇게 하면 한글은 제대로 나오는데 영문이 다른 글꼴(Arial), 혹은 영어/한글 모두 다른 글꼴로
나올 수도 있다.
그 이유는 RichEdit 2.0 이상부터는 자동으로 폰트를 변경해주는 옵션이 있기 때문이다.
아래와 같은 코드를 OnCreate맨위에 작성해주면 된다.
[CODE type=cpp]//////////////////////////////////////////////////////////////////////////
// 자동으로 영문 폰트 변경 방지
ctrlRich.SendMessage( EM_SETLANGOPTIONS
, 0
, (LPARAM)(ctrlRich.SendMessage( EM_GETLANGOPTIONS, 0, 0 ) & ~IMF_AUTOFONT) );[/CODE]
// 자동으로 영문 폰트 변경 방지
ctrlRich.SendMessage( EM_SETLANGOPTIONS
, 0
, (LPARAM)(ctrlRich.SendMessage( EM_GETLANGOPTIONS, 0, 0 ) & ~IMF_AUTOFONT) );[/CODE]
이게 왜 디폴트로 설정되어있는지 -_-
아무튼 5시간 넘은 삽질 끝에 겨우 완성^^
출처 : 데브피아 답변