반응형
CEdit 박스에 Enter 키를 눌렀을때 줄바꿈 적용 |
개발환경 : Microsoft VC++ 2010, window XP |
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); }
반응형
'기타 언어 > C# & MFC' 카테고리의 다른 글
OpenCV2.4 에서 raw 파일 로딩하기 (0) | 2013.04.18 |
---|---|
MFC 콘솔(Cmd) 에 로그 출력하기 (0) | 2013.04.13 |
Bitmap 파일 읽어서 SetDIBitsToDevice, StretchDIBits 이용해 표현하기 (1) | 2013.04.09 |
MFC VC2010 링크에러 fatal error LNK1104 (0) | 2013.04.05 |
MFC VC++ 탭 순서 변경하기 (2) | 2011.03.11 |
컬러비트 배경색 16 쓰기 (1) | 2010.08.31 |
텍스트에 컬러문자 출력하기 (0) | 2010.08.31 |
비디오 메모리에 직접엑세스 하는 방법 (3) | 2010.08.31 |