[MFC] CRichEditCtrl

간단한 텍스트 편집기를 만들기 위하여 쉽게 사용할 수 있는 Rich Edit Control을 사용하였다. 
모르면 헤메는 간단한 내용을 적어보겠다.


1. AfxInitRichEdit();

위함수를 호출안하면 Rich Edit를 가진 부모창마저 나타나지 않는다. 주의하자.

AfxInitRichEdit2();
- 텍스트가 창보다 길어 넘어갔을 경우 스크롤을 이용하려할때 2.0 버전이상이 제대로 동작한다. 참고하자.

2. Rich Edit 에서 발생하는 이벤트를 받아서 처리하기


Rich Edit Control은 자체적으로 각 커서위치의 폰트 포멧을 가지고 있는듯 하다. 그래서 커서의 CharFormat을 얻어오면 현재의 폰트와 사이즈, 색상등을 알수 있었다. 그래서 그값가지고 커서 위치에 따라 위의 Combobox에 폰트와 사이즈 색상등을 적용하려 보니 내가 받을수 있는 이벤트가 없었다... -_-ㅋ 실시간으로 타이머를 돌려? (퍽퍽..!)

컨트롤에서 이벤트를 생성하여 적용하면 

// TODO:  RICHEDIT 컨트롤인 경우, 이 컨트롤은
// CXTResizeDialog::OnInitDialog() 함수를 재지정 
//하여, IParam 마스크에 OR 연산하여 설정된 ENM_SCROLL 플래그를 지정하여 컨트롤에 EM_SETEVENTMASK 메시지를 보내지 않으면
// 편집 컨트롤이 바뀐 텍스트를 표시하려고 함을 나타냅니다.
// TODO:  여기에 컨트롤 알림 처리기 코드를 추가합니다.

위 처럼 뜨고 이벤트가 발생하지 않았다. 그래서 EM_SETEVENTMASK 이것에 대해 찾아보니 답이 나왔다.


ON_NOTIFY(EN_MSGFILTER,IDC_RICHEDIT,OnEnUpdate)

EN_MSGFILER 이벤트 핸들러 함수를 만들고 

초기화시에  내가 잡고자 하는 이벤트를 SetEventMask해준다. 

m_Ctrl_RichEdit.SetEventMask(m_Ctrl_RichEdit.GetEventMask() | ENM_MOUSEEVENTS | ENM_KEYEVENTS);


ps.
먼가 귀찮게 만들어 논거 같다.. 물론 예전에 ParaGUI로 비슷한걸 만들어봤는데 이것에 비하면 100배는 더 쉽지만..-_-

by 이카로스 | 2009/07/01 17:06 | 트랙백 | 덧글(0)

트랙백 주소 : http://icarosss.egloos.com/tb/2361663
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

.

<< 이전 페이지     다음 페이지 >>