본문 바로가기
개발/mfc

mfc: Rich Edit Control 2 쓰기

by 즐기며 2025. 8. 25.

VS 2010 기준 설명 입니다.

 

목차

0. 들머리

1. 추가

2. 멤버 변수 추가

3. 지우기

4. 글자 색깔 지정 함수

5. 글자 추가 함수

6. 글자 추가 해보기

===============

 

0. 들머리

1) Rich Edit 2.0 Control 은 Edit Control 보다 여러 가지 기능이 더있다.

    전 사실 내부 글자들 의 색깔을 바꾸기 위해서 처음 사용 시작 이었읍니다. 

    음, "Ctrl+마우스 스크롤" 하니 글자 크기도 바뀌네요

 

1. 추가

1) ToolBox > Rich Edit 2.0 Control > Dialog 에 그리기

ToolBox > Rich Edit 2.0 Control > Dialog 에 그리기

 

2). ID 바꾸기

> "만들어진 box 를 마우스로 선택 > Property > ID" 를 보시면 "IDC_RICHEDIT21" 와 같이 되어 있는데, 필요 하면 바꾸시고,

> 전 바꾸지 않고 그냥 씁니다

 

 

3) AfxInitRichEdit() 추가

> 위 1), 2) 상태에서 컴파일 하면 에러는 없는데, 실행이 안되는 군요.

> ~.cpp 파일에서 " AfxInitRichEdit() " 를 추가 합니다.

CDlg_Main::CDlg_Main(CWnd* pParent /*=NULL*/)
	: CDialogEx(CDlg_Main::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	AfxInitRichEdit2();		// 추가 한것
}

 

> BOOL CDlg_Main::OnInitDialog() 에서 추가 해 봤더니 실행 안되고 여기 CDlg_Main::CDlg_Main() 에 추가 하면 실행 되네요.

 

 2. 멤버 변수 추가

1) 박스 에서 마우스 오른쪽 버튼 > Add Variable

멤버 변수 추가

 

2) 나오는 팝업 창에서 > Variable Name 에 > "m_Disp" 라 하시고, > [Finish] 선택 합니다.

m_Disp 말고,  아무거나 쓰셔도 됩니다.  "m_" 은 멤버변수라는 뜻입니다.,

 

3) Header 파일 에 확인 하시면, "CRichEditCtrl m_Disp;"   와 같이 1줄 추가 된거 있고,

4) Cpp 파일에는 "DDX_Control(pDX, IDC_RICHEDIT21, m_Disp);" 이 추가 된거 확인 됩니다.

 

3. 지우기

> 내부 모든 글자 지우기 는 아래 4가지중 골라 쓰셔요

m_Disp.SetWindowText(NULL);
m_Disp.SetText(_T(""));
m_Disp.Clear();
m_Disp.EmptyUndoBuffer();

 

4. 글자 색깔, 효과 지정 함수

int CDlg_Main::setColorREdit(COLORREF color, DWORD effect)	// color=RGB( 255,0,0) , effect= CFE_BOLD | CFE_ITALIC
{
	CHARFORMAT cf;

	// Initialize character format structure
	memset(&cf, 0, sizeof(CHARFORMAT));
	cf.cbSize		= sizeof(CHARFORMAT);
	cf.dwMask		= CFM_COLOR | CFM_EFFECTS;	// CFM_ : Mask, 
	cf.dwEffects	= effect;	// 효과 설정, To disable CFE_AUTOCOLOR, // CFE_BOLD | CFE_ITALIC;
	cf.crTextColor	= color;	//	Color 설정

	// Set insertion point to end of text
//	m_Disp.SetSel(-1, -1);

    //  Set the character format
    m_Disp.SetSelectionCharFormat(cf);
//	m_Disp.ReplaceSel(strText); 

	return 0;
}

 

 

5. 글자 추가 함수

// 이 함수는 Edit Control 과 Rich Edit Control 2 에서 쓸 수 있다.
// 남은 글자수가 1000 개가 안되면, 처음 1000글자 지우고 쓴다.
void CDlg_Main::wCsDisp( CString cS ){
	int nLength;

	nLength = m_Disp.GetWindowTextLength();     // 글자수 확인
	if(  (unsigned int)(nLength + 1000) > m_Disp.GetLimitText() ) {  // 남은 글자 수가 1000 개 가 안되면, 1000개 지운다.
		m_Disp.SetSel(1, 1000);		// 처움 부터 1000 개
		m_Disp.Clear();              // 지우고
		nLength = m_Disp.GetWindowTextLength();     // 다시 글자수 확인
	}
//	m_Disp.SetSel(nLength, nLength);		// put the selection at the end of text
	m_Disp.SetSel(-1, -1); // 커서 위치를 맨 뒤로 이동
	m_Disp.ReplaceSel(cS);				// replace the selection
//	m_Disp.SetFocus();	// 마지막 텍스트를 Focus
}

 

>  최대 글자수는 GetLimitText() 이며 32767 정도 로 나오네요... 흠,,, rich 는 거의 무한대 처럼 말하던데

    GetLimitText 함수가 rich edit 가 아니고 그냥 edit 함수 인가 ?

 

6. 글자 추가 해보기

	setColorREdit( RGB( 255,   0,    0), CFE_ITALIC );  wCsDisp(_T("빨강, 기울여\n"));
	setColorREdit( RGB(   0,   0,  255), CFE_BOLD   );  wCsDisp(_T("파랑, 굵게\n")); 
	setColorREdit( RGB(   0,   0,    0), 0 );           wCsDisp(_T("검정,  보통\n"));

 

> 결과 

 

 

> 수고 하셨읍니다.