리치에디트 컨트롤 사용하기1) AfxInitRichEdit();App 클래스의 InitInstance 함수에서 AfxInitRichEdit 함수를 호출하여 Common Control Library를 초기화시킵니다.2) 워드랩 하기// WrapNone (워드랩 않하기)SetTargetDevice(NULL, 1);// WrapToWindow (워드랩 하기)SetTargetDevice(NULL, 0);3) 원하는 구문만 색상및 폰트변경하기CRichEditCtrl m_reChat;다음 함수는 m_reChat라는 이름의 리치 에디트 컨트롤에 strTextIn으로 지정한 메시지를 추가합니다. crNewColor로 지정한 색상과 sSize로 지정한 크기와 lpszFontName으로 지정한 글꼴로 만들어 추가합니다.void Cxxx::AddText(CString &strTextIn, COLORREF &crNewColor, int sSize, LPCSTR lpszFontName){ //리치에디트 컨트롤의 끝에 문자열 추가하기 int iTotalTextLength = m_reChat.GetWindowTextLength(); m_reChat.SetSel(iTotalTextLength, iTotalTextLength); m_reChat.ReplaceSel((LPCTSTR)strTextIn); int iStartPos = iTotalTextLength; //인자로 넘어온 색상값과 폰트크기로, CHARFORMAT 설정 CHARFORMAT cf; cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR | CFM_UNDERLINE | CFM_BOLD | CFM_FACE | CFM_SIZE; cf.dwEffects = (unsigned long)~( CFE_AUTOCOLOR | CFE_UNDERLINE | CFE_BOLD); cf.crTextColor = crNewColor;//RGB(0, 0, 0); cf.yHeight = sSize * 20; strcpy(cf.szFaceName, lpszFontName); //새로추가된 부분에 색상및 폰트 속성 적용 int iEndPos = m_reChat.GetWindowTextLength(); m_reChat.SetSel(iStartPos, iEndPos); m_reChat.SetSelectionCharFormat(cf); m_reChat.HideSelection(TRUE, FALSE); m_reChat.LineScroll(1);}============================================================
[리치에디트 컨트롤의 스트링 추가]
// 리치에디트 컨트롤의 마지막에 문자열 추가
void AddString2RichEdit( HWND hwnd, UINT id, char* pstr )
{
// 리치에디트 컨트롤 핸들
HWND hwndRich = GetDlgItem( hwnd, id );
void AddString2RichEdit( HWND hwnd, UINT id, char* pstr )
{
// 리치에디트 컨트롤 핸들
HWND hwndRich = GetDlgItem( hwnd, id );
// 문자열 추가 구조체 선언
SETTEXTEX settextex;
// 멤버 초기화. ST_SELECTION을 사용하지 않으면, 전체 내용을 덮어씁니다.
settextex.flags = ST_SELECTION;
settextex.codepage = CP_ACP;
SETTEXTEX settextex;
// 멤버 초기화. ST_SELECTION을 사용하지 않으면, 전체 내용을 덮어씁니다.
settextex.flags = ST_SELECTION;
settextex.codepage = CP_ACP;
// settextex 구조체의 형식대로 pstr을 리치에디트 컨트롤에 입력합니다.
SendMessage( hwndRich, EM_SETTEXTEX, (WPARAM) &settextex, (LPARAM) pstr );
SendMessage( hwndRich, EM_SETTEXTEX, (WPARAM) &settextex, (LPARAM) pstr );
// 추가된 줄을 포함해서 전체 줄 수 계산 : 1-based 인덱스 사용
int nLines = (int) SendMessage( hwndRich, EM_GETLINECOUNT, 0, 0 );
int nLines = (int) SendMessage( hwndRich, EM_GETLINECOUNT, 0, 0 );
// 눈에 보이는 첫 번째 줄을 가리키는 인덱스 반환 : 0-based 인덱스 사용
int nVisibleLine = (int) SendMessage( hwndRich, EM_GETFIRSTVISIBLELINE, 0, 0 );
int nVisibleLine = (int) SendMessage( hwndRich, EM_GETFIRSTVISIBLELINE, 0, 0 );
// 문자열이 추가됐다고 해서, 스크롤이 자동으로 일어나지 않습니다.
// 추가된 줄이 보이는 만큼 스크롤
// 스크롤 양 = 전체 줄 수 - ( 눈에 보이는 첫 번째 줄 + 한 // 줄 개수 )
SendMessage( hwndRich, EM_LINESCROLL, 0, nLines - nVisibleLine - 20 );
}
// 추가된 줄이 보이는 만큼 스크롤
// 스크롤 양 = 전체 줄 수 - ( 눈에 보이는 첫 번째 줄 + 한 // 줄 개수 )
SendMessage( hwndRich, EM_LINESCROLL, 0, nLines - nVisibleLine - 20 );
}
TAG RichEdit

