본문 바로가기

별걸다하는 IT/기타IT

[C++ MFC 윈도우] 텍스트 입력하는 에디트 컨트롤 Edit Control 속성에 있는 스타일과 이벤트 목록 살펴보기

반응형

안녕하세요 양햄찌 블로그 주인장입니다.

오늘 진행할 포스팅은 컨트롤집중 포스팅(?)인데요.

 

MFC - EDIT CONTROL 속성 및 이벤트 정리

MFC에서 텍스트 입력에 사용되는 에디트 컨트롤 Edit Control에 대해 알아보려고 해요.

사실 주로 쓰는 것만 쓰겠지만..?

 

리소스 뷰로 이동하면 도구 상자에서 Edit Control을 찾을 수 있어요.

참고로 리소스 뷰로 이동하는 단축키는 ctrl + shift + e입니다!

 

에디트 컨트롤 속성 훑어보기

왼쪽은 영어버전, 오른쪽은 한글버전 

에디트 컨트롤를 하나 만들고 클릭하면 나타나는 오른쪽 하단의 속성 창을 확인해봅시다.

물론, 우클릭→속성 버튼을 눌러서 확인해도 돼요~!

 

여기에 나와 있는 속성이 각각 무엇을 의미하는지 한 번 훑어보려고 합니다. 

순서는 영문버전에 나와있는 파란색 박스 순으로 정리해봤어요

자주 사용하는 속성은 특별히 빨간색 글씨로 강조해봤습니다 

 

(사실 이거 속성명 누르면 밑에 설명 뜨긴 뜹니당)

요런식으로 ㅋㅋ

영문 속성창 항목 - 한글 속성창 항목  [ 스타일 ]

 Accept Files - 파일 허용

에디트창에 파일 드래그 앤 드롭 가능하게 해주는 옵션

 

 Disabled - 사용 안함

초기에 컨트롤이 사용 불가능하게 됩니다.

 

 Help ID - 도움말 ID

컨트롤에 도움말ID를 부여해 보통 리소스ID를 기초로 하여 도움말 ID가 만들어짐

 

■ Multiline - 여러 줄 [ ES_MULTILINE ]

True로 변경하면 다중행 입력할 수 있는 입력상자가 됩니다. 

 

 No Hide Selection - 숨기기 선택 없음 [ ES_NOHIDESEL ] 

그 텍스트 상자를 클릭하면 푸른색 테두리가 둘러싸지면서 포커싱이 되는데요.

포커싱 잃어도 그 푸른색테두리  유지하게끔 해주는 옵션입니다.

 

 OEM Convert - OEM 변환 [ ES_OEMCONVERT ]

입력되는 문자열을 OEM 문자셋으로 출력하는 속성입니다.

 

 Password - 암호 [ ES_PASSWORD ]

입력된 글자를 *로 표시해줍니다 (단일행 에디트 컨트롤에서만 사용 가능해요.)

 

■ Read Only - 읽기 전용 [ ES_READONLY ]

텍스트창을 편집이 불가능한 읽기 전용으로 만듭니다.

 

 Visible - 표시

프로그램이 처음 실행될 때 해당 컨트롤이 보여지게 할건지 여부  (디폴트 True)

 

 Want Return - 반환 설정 [ ES_WANTRETURN ]

원래 줄바꿈을 하려면 ctrl+enter를 눌러야 가능한대, 그냥 엔터만 눌러도 줄바꿈을 가능하게 해줍니다.

기존에 컨트롤 엔터를 눌러야 했던 이유는 엔터가 디폴트로 버튼 누르는 효과를 가졌기 때문! 

 

스크롤을 내려서 이어서~~~~!

 

■ Align Text -  텍스트 맞춤 [ ES_LEFT, ES_CENTER, ES_RIGHT ] 

텍스트를 왼쪽정렬로 할건지 오른쪽 정렬로 할건지 가운데 정렬로 할건지

 

 Auto HScroll -  자동 HScroll  [ ES_AUTOHSCROLL ]

만약 입력문자열이 많아져서 가로 길이를 침범할 경우 수평 스크롤 자동으로 생성. H는 수평을 의미하는 horizontal의 약자겠죠?

 

■ Auto VScroll - 자동 VScroll [ ES_AUTOVSCROLL ]

입력 문자열이 많아져서 세로 길이를 침범할 경우 자동으로 세로 스크롤 생성. (멀티라인만 가능) 

 

 Border - 테두리

Border

텍스트 주변에 경계선을 만들어줍니다. (기본이 True)

 

 Client Edge - 클라이언트 가장자리 

컨트롤에 오목한 테두리를 지정합니다. (사실 기본 에디트 컨트롤에선 차이 없음)

 

 Horizontal Scroll - 가로 스크롤 

수평 스크롤바를 설치. 멀티라인에만 가능합니다. 침범하지 않아도 만들어져 있는 기본 스크롤바인거죠.

 

 Left Scrollbar - 왼쪽 스크롤 막대 

세로 스크롤 막대가 있는 경우 컨트롤의 왼쪽에 오도록 지정합니다.

 

 Lowercase - 소문자 [ ES_LOWERCASE ]

입력된 문자들을 모두 소문자로 변환

 

 Modal Frame - 모달 프레임

컨트롤에 이중 테두리를 지정합니다.

 

 Number - 숫자 [ ES_NUMBER ] 

숫자만 입력 가능하게 설정 (0-9)

숫자가 아닌 문자가 들어오면 입력이 안되면서 알람소리가 들립니다.

 

 Right Align Text - 텍스트 오른쪽 맞춤

컨트롤의 텍스트를 오른쪽에 맞추도록 지정합니다.

 

 Right to Left Reading Order - 오른쪽에서 왼쪽으로 읽기 

텍스트를 오른쪽에서 왼쪽으로 출력합니다.

 

 Static Edge - 정적 가장자리 

모달프레임 True와 그냥 border만 했을 경우랑 정적 가장자리 True 세 종류 비교

컨트롤에 3차원 테두리 스타일을 사용하여 창을 만듭니다. 

 

Transparent - 투명

에디트 컨트롤의 배경 색상을 투명하게 만들어 컨트롤 아래쪽의 배경이 보일 수 있도록 합니다.

 

 Uppercase - 대문자 [ ES_UPPERCASE ]

입력된 문자들을 모두 대문자로 변환

 

Vertical Scroll - 세로 스크롤

 

세로 스크롤바 설치. 멀티라인에만 가능합니다. 자동 세로 스크롤은 침범해야만 스크롤바가 생기는데 이 기본 스크롤은, 비활성화된 스크롤바가 디폴트로 생성되어 있습니다. 

 

에디트 컨트롤 이벤트 살펴보기~!

 EN_ALIGN_LTR_EC

사용자가 편집 컨트롤의 방향을 왼쪽에서 오른쪽으로 변경했을 때 발생

 

 EN_ALIGN_RTL_EC

사용자가 편집 컨트롤의 방향을 오른쪽에서 왼쪽으로 변경했을 때 발생

 

■ EN_CHANGE

내용을 변경했을 때 화면에 보여지고 난 후 이벤트 발생

 

 EN_ERRSPACE

메모리가 부족해서 에러났을 때,

 

 EN_HSCROLL

수평 스크롤바를 클릭했을 때

 

 EN_KILLFOCUS

키보드 포커싱을 잃었을 때

 

■ EN_MAXTEXT

텍스트 최대길이까지 입력해서 더는 문자를 입력할 수 없을 때

 

 EN_SETFOCUST

키보드 포커싱 활성화 되었을 때

 

 EN_UPDATE

내용을 변경했을 때 화면에 그려지기 전에 이 이벤트 발생

 

 EN_VSCROLL

수직 스크롤바를 클릭했을 때

 

NM_THEMECHANGED

테마가 변경되었을때 이벤트 발생

 

[실습 - 텍스트에 글을 쓰고 버튼을 누르면 메세지창으로 쓴 문자열 띄우기!]

아주 아주 간단한 MFC 앱을 만들어봅시다.

앱이 하는건 텍스트에 글을 입력하고 제출 버튼을 누르면 해당 글이 알람창으로 뜨는게 다예요!

입력창과 버튼을 저렇게 만들어줍시당

 

그리고 먼저 Edit Control의 속성 살펴보기~~!

Edit Control 속성

먼저 에디트 컨트롤의 ID 명을 기억해둡시다. 

ID가 IDC_EDIT1이네요. 흠 어떤 속성을 부여할까 하다가 기본적으로 다행 입력이 가능하도록 Multiline을 True로 해줬어요. 혹시라도 Read Only 속성이 Yes로 되어있으면 입력이 안되므로 No로 되어있는지 한 번 더 체크해줍시다.

버튼 속성

그 다음에 버튼 속성으로 갈게요! 먼저, 버튼 글자내용이 'Button1' 보이는건 좀 뭔가 맘에 안들잖아요. '제출'로 보일 수 있도록 Caption부분을 변경해줍시다. 

버튼 이벤트 창

우리가 원하는 건 버튼이 눌렸을 때 뭔가 동작을 하는거니까, 이벤트는 버튼에서 적용되어야 해요.

버튼이 클릭 되었을 때 동작될 수 있도록 BN_CLICKED를 클릭해 이벤트함수를 더해줍시다.

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}

그럼 자동으로 MFCApplication1Dlg.cpp 파일로 넘어와서 요런 함수가 생겨날텐데, 

여기서 버튼이 클릭되었을 때 프로그램이 어떤동작을 했으면 좋겠을지 소스코드를 짜주면 돼요.

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	CString str = _T("");  	//문자열을 저장하기 위해 CString 클래스의 str 객체 생성
	GetDlgItemText(IDC_EDIT1, str); // IDC_EDIT1 컨트롤부터 문자열을 읽어 str에 저장.
	MessageBox(str); 	//메세지알림으로 str을 출력하기
}

버튼이 클릭되면, 에디트컨트롤부터 문자열을 읽어 str에 저장한 다음에, 메세지박스로 그 문자열을 출력해주는 코드를 짜봤어요. 

짠!! 잘 동작하는지 실행해볼까요? 요렇게 입력해줬습니다. (참고로 ctrl + enter하면 다음줄로 넘어갈 수 있어요)

제출을 클릭했더니 메세지가 잘 뜨는 것을 확인할 수 있습니다! 

대강 속성과 이벤트를 어떻게 활용해야할지 이해가 되셨죠??

 

이렇게 한 번 쭉 읽어보면, 다음에 어떤 스타일이나 특징을 편집창에 적용시키고 싶거나,

이벤트를 발생시키고 싶을 때 도움이 되실거예요.

오늘 포스팅은 여기까지입니다. 

반응형