=================================
=================================
=================================
출처: http://ospace.tistory.com/171
생성하기: 리치에디트를 핸들러를 생성하고 화면에 추가하고 변수와 연결하는 부분을 다룬다.
AfxInitRichEdit();
CRichEditCtrl m_editMain;
HMODULE hMod = LoadLibrary("Riched20.dll");
HANDLE hRich = Create(RICHEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_MULTILINE | WS__VSCROLL, 0, 0, 0, hWnd, (HMENU)0, g_hInst, NULL);
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpstrCmdLine*/, int /*nCmdShow*/) { HINSTANCE hRich = LoadLibrary(CRichEditCtrl::GetLibraryName()); if(NULL == hRich) { AtlMessageBox(NULL, _T("Error load a rich edit module."), _T("Error"), MB_OK | MB_ICONERROR); return 0; } // ... 중략 }
CRichEditCtrl m_editMain;
m_editMain.Attach(GetDlgItem(IDC_RICHEDIT2_MAIN));
MFC와 WTL의 사용법은 동일하다. 리치 에디터로 텍스트 출력은 다음과 같이한다.
void CXXX::PrintMain(const std::string& msg) { m_editMain.ReplaceSel(msg.c_str()); }
간혹 위의 코드 컴파일서 chr*를 LPCTSTR로 변환이 안된다며 컴파일 에러가 발생한다. 그러면, 프로젝트 설정에서 문자열 사용을 Use Multi-Byte Character Set로 하면된다.void CXXX::PrintMain(const std::string& msg) { SendMessage(hRich, EM_REPLACESEL, (WPARAM)0, (LPARAM)msg.c_str()); }
아래는 특정 줄로 이동하여 해당 줄의 텍스트를 선택하는 것이다.
void CXXX::selectLine(int lien) { int lineIdx = m_editMain.LineIndex(line); int lineLen = m_editMain.LineLength(lineIdx); m_editMain.SetSel(lineIdx, lineIdx + lineLen); }
int value1 = -1; int nchar = m_richeditMain.SendMessage(EM_LINEFROMCHAR, (WPARAM) value1, 0); int value2 = 1; int nline = m_richeditMain.SendMessage(EM_LINEINDEX, (WPARAM) value2, 0); int value3 = 0; int nlength = m_richeditMain.SendMessage(EM_LINELENGTH, (WPARAM) value3, 0);
CHARFORMAT2 cf2; memset(&cf, 0, sizeof(CHARFORMAT2)); cf2.cbSize = sizeof(CHARFORMAT2); SendMessage(hRich, EM_GETCHARFORMAT, 1, (LPARAM)&cf2);
CHOOSEFONT CFT; // 글꼴 공통 대화상자 사용 LOGFONT lf; // ... CFT 대화상자에서 글꼴 설정 // CHARFORMAT2 cf2; memset(&cf, 0, sizeof(CHARFORMAT2)); cf2.cbSize = sizeof(CHARFORMAT2); cf2.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_STRIKEOUT; cf2.crTextColor = CFT.rgbColors; cf2.yHeight = CFT.iPointSize * 2; strcpy(cf2.szFaceName, lf.lfFaceName); // lf는 df2.dwEffects = 0; if(lf.lfItalic) cf.dwEffects |= CFE_ITALIC; if(lf.lfwight == FW_BOLD) cf.dwEffects |= CFE_BOLD; //...(생략) SendMessae(hRich, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);
PARAMFORMAT2 pf2; memset(&pf2, 0, sizeof(PARAMFORMAT2)); pf2.cbSize = sizeof(PARAMFORMAT2); pf2.dwMask = PFM_ALIGNMENT | PFM_OFFSETINDENT | PFM_OFFSET | PFM_RIGHTINDENT | PFM_LINESPACING; SendMessage(hRigh, EM_GETPARAFORMAT, 0, (LPARAM)&pf2);
SendMessage(hRigh, EM_SETPARAMFORMAT, 0, (LPARAM) &pf);
=================================
=================================
=================================
'프로그래밍 관련 > MFC' 카테고리의 다른 글
[MFC] UI, 이미지로드 변경수정시 Invalidate(); 하였을때 더블버퍼링으로 부드럽게,GDI+ 더블 버퍼링 관련 (0) | 2016.12.01 |
---|---|
[MFC] GDI+를 이용한 이미지처리 (Gray, 투명, 회전), 선그리기 관련 (0) | 2016.11.30 |
[MFC] Custom Control 사용 관련 (0) | 2016.11.30 |
[MFC] Picture control 사용,이용 하기 관련 (0) | 2016.11.30 |
MFC CStatic Text 컨트롤 배경 투명하게 학기 (0) | 2009.02.24 |
댓글 영역