SPRING :: NOTE

[MFC] RichEdit Control 본문

Development Language/C · C++ · MFC

[MFC] RichEdit Control

RAYZIE 2016. 3. 11. 18:30
반응형
RichEdit Control 추가
 


AppName.cpp에 아래 소스 추가

AppName::InitInstance()
{
        // 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
	// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다.
	// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 응용 프로그램에서 사용할 모든 공용 컨트롤 클래스를 포함하도록
	// 이 항목을 설정하십시오.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	/* 이 소스 추가 */
	AfxInitRichEdit2();
	/* 이 소스 추가 */

	AfxEnableControlContainer();
}
AppNameDlg.h 파일에 아래 컨트롤러 및 함수 추가

        /* rich edit */
	void RsDataAddString(CString strWriteData, COLORREF crTextColor, int sSize);
        CRichEditCtrl *pWndRich;
AppNameDlg.Cpp 파일의 Init 코드 작성
/* init Rich Edit */
pWndRich = (CRichEditCtrl*)GetDlgItem(IDC_RICH_LOG);
pWndRich->SetEventMask(pWndRich->GetEventMask() | ENM_CHANGE);
AppNameDlg.cpp 파일에 RichEdit Control 함수 작성
AppName::RsDataAddString(CString strWriteData, COLORREF crTextColor, int sSize)
{

	int nLineCnt = pWndRich->GetLineCount();

	int nTextLen = pWndRich->GetWindowTextLengthA();

	pWndRich->SetSel(nTextLen, nTextLen);

	pWndRich->ReplaceSel((LPCTSTR)strWriteData);

	int iStartPos = nTextLen;



	// Create 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 = crTextColor;

	cf.yHeight = sSize * 20;



	// WriteData Setting

	int iEndPos = pWndRich->GetWindowTextLength();

	if (nLineCnt > 1) iStartPos -= nLineCnt;

	pWndRich->SetSel(iStartPos, iEndPos);

	pWndRich->SetSelectionCharFormat(cf);

	pWndRich->HideSelection(TRUE, FALSE);

	pWndRich->SendMessage(WM_VSCROLL, SB_BOTTOM, 0);

}
사용 할 부분에서 함수 추가.

RsDataAddString("Logging Stop!\n", RGB(255, 255, 255), 10);
/* 파라미터 값 */
/* RsDataAddString([추가할 문자], [폰트 색상], [폰트사이즈]); */
마우스를 이용하여 커서수정 안되도록 하기 및 개행 문자 적용을 위한 속성값 세팅






RichEdit 라인 수 제한 및 삭제

// 200 라인 제한 후 RichEdit 비우기. 
if (pWndRich->GetLineCount() == 200)
{
        // ("", 공백으로 바꿔준다.)
	pWndRich->SetWindowTextA("");
}
더 좋은 코드가 있을 것 같지만... 찾기가 귀찮아 임시로 제한한다.. 라인이 3천이 넘어가도 별다른 이상이 없어 그냥 쓰려다 이방법을 찾아 추가.




반응형

'Development Language > C · C++ · MFC' 카테고리의 다른 글

[MFC] Modaless(모달리스) 컨트롤  (0) 2016.04.27
[MFC] 프로그램 중복 실행 방지하기  (0) 2016.04.05
[MFC] EDIT CONTROL  (0) 2016.03.10
[MFC] BUTTON CONTROL  (0) 2016.03.10
[MFC] 디렉토리 생성  (0) 2016.03.07
Comments