<출처> http://mainia.tistory.com/599
CEdit 컨트롤을 사용해 한줄이 아닌 여러줄의 멀티라인 글을 쓸수 있도록
설정해야 할 때가 있다. Properties 에서 Mutility Line 으로 변경한다고
해서 설정이 끝나는 것은 아니다. 아래의 내용을 참고 하기 바란다.
CEdit 박스에 Enter 키를 눌렀을때 줄바꿈을 적용하기 위해서는 우선
PreTranslateMessage 를 overriding 해야한다. MSG 값중
WM_KEYDOWN 와 VK_RETURN 이 Enter 에 해당한다.
그리고 Edit 박스에 Focus 가 있는지 판단해서 줄바꿈을 적용한다.
BOOL CHelloDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { if (GetDlgItem(IDC_EDIT1) == GetFocus()) { //작업 } } } |
그리고 작업이라고 쓰여진 주석에 아래 코드를 넣는다.
edit 에 들어간 문자열의 길이를 알아낸후 시작과 끝 문자값을 같은
값으로 선택한다(SetSel함수) 그 끝을 캐리지리턴(\r\n) 로
교체 하는 것이다.
|
CEdit* edit = (CEdit*)GetDlgItem(IDC_EDT_SPECIFIC); int nLen = edit->GetWindowTextLength(); edit->SetSel( nLen, nLen ); edit->ReplaceSel( _T( "\r\n" ) ); |
그리고 enter 를 계속 누르다가 edit 의 영역을 벗어날때 스크롤이 생기게
할려면 Auto VScroll 속성값을 True 로 변경한다.
그리고 스크롤이 보이게 할려면 Vertical Scroll 속성을 True로 변경해야한다
전체 소스는 다음과 같다
BOOL Dlg_ConfigBad::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { if (GetDlgItem(IDC_EDT_SPECIFIC) == GetFocus()) { CEdit* edit = (CEdit*)GetDlgItem(IDC_EDT_SPECIFIC); int nLen = edit->GetWindowTextLength(); edit->SetSel( nLen, nLen ); edit->ReplaceSel( _T( "\r\n" ) ); } } return CDialogEx::PreTranslateMessage(pMsg); } |
'old drawer > C, C++, MFC' 카테고리의 다른 글
[MFC] CListCtrl 선택된 항목 Index (0) | 2014.01.24 |
---|---|
[MFC] CListCtrl에서 포커스를 잃어도 선택된 아이템 유지하는 옵션 (0) | 2014.01.17 |
[MFC] CListCtrl 을 사용한 내용 삽입 (0) | 2014.01.17 |
[MFC] SDI 프로젝트를 Dialog 처럼 사용하기 (0) | 2014.01.15 |
[MFC] 유니코드 사용하기 (0) | 2014.01.09 |