컨트롤, 프로퍼티, 이벤트
강의 내용 포인터(pointer) 복습 컨트롤, 프로퍼티(=속성), 이벤트 MFC 프로그래밍 실습
포인터 복습 - 포인터가 아니었다면?? OnDraw(CDC* pDC)가 아니라 OnDraw(CDC DC)라면? OS는 DC 원본의 열쇠(포인터 = 주소)만 함수에 넘겨 주는 것이 아니라 DC의 복사본을 하나 더 만든 다음 그 복사본의 열쇠를 넘겨 줌 따라서 불필요한 메모리를 차지하게 됨
실습 2 : 컨트롤, 프로퍼티, 이벤트 1단계 : Visual C++ 시작
실습 2 : 컨트롤, 프로퍼티, 이벤트 2단계 : 프로젝트 만들기 파일(F) > 새로 만들기(N) > 프로젝트(P)…
실습 2 : 컨트롤, 프로퍼티, 이벤트 2단계 : 프로젝트 만들기 새 프로젝트 창에서 1. “프로젝트 형식(P)”에서 MFC 선택 2. “Visual Studio에 설치되어 있는 템플릿”에서 MFC 응용 프로그램 선택 3. “위치(L):”에서 가장 오른쪽 찾아보기(B)… 클릭해서 작업할 디렉터리 찾기 4. “이름(N)”에서 프로젝트 이름 입력 : “ControlPropertyEvent_(자신의 이름)” 5. 확인 단추 클릭
실습 2 : 컨트롤, 프로퍼티, 이벤트 3단계 : 응용 프로그램 마법사 응용 프로그램 마법사 창 오른쪽에서 응용 프로그램 종류 선택
실습 2 : 컨트롤, 프로퍼티, 이벤트 3단계 : 응용 프로그램 마법사 응용 프로그램 종류:에서 다중 문서(M)을 대화상자기반(D)로 변경 아래에서 다음> 단추 클릭
실습 2 : 컨트롤, 프로퍼티, 이벤트 3단계 : 응용 프로그램 마법사 주 프레임 스타일:에서 최소화 상자와 최대화 상자 선택 아래에서 다음> 단추 클릭
실습 2 : 컨트롤, 프로퍼티, 이벤트 3단계 : 응용 프로그램 마법사 이 상태 그래도 아래에서 다음> 단추 클릭
실습 2 : 컨트롤, 프로퍼티, 이벤트 3단계 : 응용 프로그램 마법사 생성된 클래스에서 **App와 **Dlg 두 개 확인 아래에서 마침 단추 클릭
실습 2 : 컨트롤, 프로퍼티, 이벤트 4단계 : 완료. 다시 Visual Studio로 돌아온 화면
실습 2 : 컨트롤, 프로퍼티, 이벤트 5단계 : 테스트를 위해 컴파일 (CTRL+F5) 결과 화면
실습 2 : 컨트롤, 프로퍼티, 이벤트 참고 – 세 가지 MFC 창 형태 단일 문서 인터페이스 대화상자 (SDI) 다중 문서 인터페이스 (MDI)
시각 요소 설계 리소스 뷰 선택 OR
시각 요소 설계 리소스 뷰에서 + 단추를 계속 클릭해서 Dialog 항목 왼쪽의 + 단추를 클릭 IDD_CONTROLPROPERTYEVENT__DIALOG 클릭 IDD_CONTROLPROPERTYEVENT__DIALOG은 우리가 만들 대화상자의 이름
시각 요소 설계 정적 텍스트 (“TODO: 여기에…. “), 확인, 취소 단추를 지움 (클릭 한 다음 DEL 키 눌러서)
시각 요소 설계 먼저 크기 조정… (왼쪽 아래 컨트롤 포인트 클릭 후 끌어서 이동)
시각 요소 설계 도구 상자 표시 및 고정하기
시각 요소 설계 그룹 박스 선택 및 그리기 (클릭 후 끌어서 사각형 형태로) 그룹 박스는 컨트롤을 구분해 주는 역할 그리기 후 그룹 박스를 선택한 상태에서 마우스 오른쪽 단추를 클릭한 후 ‘속성’ 선택 Caption에서 “Static”을 자기 이름으로 변경
시각 요소 설계 도구 상자에서 Edit Control을 클릭한 후 오른쪽 처럼 클릭 후 끌어서 위치시킴 도구 상자에서 Check Box를 클릭한 다음 가운데 그림처럼 두 개를 만들어 줌 Check1을 클릭한 다음 마우스 오른쪽 단추를 클릭하고 속성을 선택해서 오른쪽에 속성 패널을 열고 Caption에서 “Check1” 대신 “Visi&ble”을 입력 마찬가지로 Check2를 클릭한 후에 “Check2” 대신 “&Enabled” 입력
시각 요소 설계 도구 상자에서 Button Control을 클릭한 후 오른쪽 처럼 클릭 후 끌어서 위치시킴 그림 처럼 단추 세 개 생성 각 단추를 클릭하고 이전 처럼 마우스 오른쪽 단추를 클릭한 후에 ‘속성’을 클릭한 다음 (이미 오른쪽에 속성 패널이 열려 있다면 자동으로 해당 컨트롤에 대한 속성으로 변환) Caption에서 “Button1” -> “&Test”, “Button2” -> “&Clear”, “Button3” - > “E&xit”로 변경
시각 요소 설계 CTRL+F5를 눌러서 컴파일 후 실행 이 때 단추를 누를 수 있고 Edit Control 안에 문자를 입력할 수는 있지만 어떤 반응도 나타나지 않음 단축키 기능: 포커스(이 때는 커서)를 Edit Control에서 다른 곳으로 옮기기 위해 빨간 원으로 표시된 부분을 마우스로 한 번 클릭한 다음 키보드에서 b를 눌러 보고 또 E를 눌러서 확인
각 컨트롤에 변수 연결 이제 해야 할 일은 원하는 작업을 수행하기 위해 각 컨트롤(단추, 에디트 컨트롤 등)에 변수를 연결해야 하는 작업. 프로젝트 > 변수 추가(C)… 클릭 변수 추가 마법사 창이 나타남 이 때 ‘컨트롤 변수’ 선택 컨트롤 ID 드롭다운 목록에서는 지금까지 만든 컨트롤 ID가 나타남 다른 컨트롤 ID를 선택할 때마다 왼쪽의 변수 형식과 오른쪽의 컨트롤 형식이 변경됨
체크 상자에 BOOL 변수 연결 왼쪽에서 리소스 뷰 탭 클릭 리소스 뷰에서 + 단추를 계속 클릭해서 Dialog 항목 왼쪽의 + 단추를 클릭 IDD_CONTROLPROPERTYEVENT__DIALOG 클릭 다시 프로젝트 > 변수 추가(C)… 클릭 컨트롤 ID를 IDC_CHECK1으로 변경 범주를 Value로 변경 이 때 ‘변수 형식’을 BOOL로 전환 변수 이름에 m_VisibleCheck입력 그 다음 컨트롤 ID를 IDC_CHECK2로 변경 변수 이름에 m_EnabledCheck입력
Edit Control에 CString 변수 연결 컨트롤 ID를 IDC_EDIT1으로 변경 범주를 Value로 변경 이 때 ‘변수 형식’은 자동으로 CString으로 전환 변수 이름에 m_TestEdit입력 마침 클릭
소스 코드에서 확인 생성한 변수는 어디에?? 솔루션 탐색기 탭 클릭 헤더 파일 중 ControlPropertyEvent_(이름)Dlg.h 클릭 오른쪽 창에서 아래로 스크롤 해서 public: 다음 방금 입력한 변수들 확인
변수의 의미 이렇게 생성된 변수는 각 컨트롤과 연결 Edit control은 m_TestEdit 변수를 통해 텍스트를 입력 또는 출력 Visible 체크 상자의 상태(true/false)는 바로 m_VisibleCheck에 전달
초기화 코드 생성 경우에 따라 컨트롤들이 어떤 특정한 값으로 미리 설정되어야 하는 필요 발생 ControlPropertyEvent_(이름)Dlg.cpp에서 OnInitDialog()를 찾아서 아래와 같이 초기값 입력 UpdateData(FALSE); // 각 변수의 현재값을 컨트롤로 보냄
초기화 코드 생성 CTRL+F5 결과
Exit 단추 클릭 시 종료 코드 작성 다시 리소스 뷰 탭을 클릭해서 돌아 간 후 Exit 단추를 마우스 오른쪽 단추로 클릭한 다음 이벤트 처리기 추가 이벤트는 사용자가 컨트롤을 작동시켰을 때 OS에게 전달하는 메시지 아래 이벤트 처리기 마법사에서 추가 및 편집 클릭
Exit 단추 클릭 시 종료 코드 작성 자동으로 소스 코드 편집기로 이동 OnBnClickedButton3() 함수가 자동으로 추가된 상황을 볼 수 있음 사용자가 Exit 단추를 클릭할 때마다 이벤트가 생성되고 OS에 전달되며 OS는 그 때마다 이 함수를 실행 // TODO:… 아래에 OnOK(); 입력 CTRL+F5 눌러서 컴파일, 실행 후 Exit 단추 클릭 창이 닫히면 성공
Test 단추 클릭 시 문자열 출력 다시 리소스 뷰 탭을 클릭해서 돌아 간 후 Test 단추를 마우스 오른쪽 단추로 클릭한 다음 이벤트 처리기 추가 아래 이벤트 처리기 마법사에서 추가 및 편집 클릭
Test 단추 클릭 시 문자열 출력 자동으로 소스 코드 편집기로 이동 OnBnClickedButton1() 함수가 자동으로 추가된 상황을 볼 수 있음 사용자가 Test단추를 클릭할 때마다 이벤트가 생성되고 OS에 전달되며 OS는 그 때마다 이 함수를 실행 // TODO:… 아래에 다음과 같이 입력 CTRL+F5 눌러서 컴파일, 실행 후 Test 단추 클릭 입력한 텍스트가 에디트 컨트롤에 표시되면 성공
Clear 단추 클릭 시 문자열 삭제 다시 리소스 뷰 탭을 클릭해서 돌아 간 후 Clear 단추를 마우스 오른쪽 단추로 클릭한 다음 이벤트 처리기 추가 이벤트 처리기 마법사에서 추가 및 편집 클릭 그림 처럼 코드 입력 CTRL+F5 -> Test 단추 클릭 후 Clear 단추 클릭
Visible 체크 상자 클릭 시 작동 Visible 체크 상자 마우스 오른쪽 단추 클릭 이벤트 처리기 추가 클릭 아래 이벤트 처리기 마법사에서 추가 및 편집 클릭
Visible 체크 상자 클릭 시 작동 OnBnClickedCheck1() 함수가 자동으로 추가된 상황을 볼 수 있음 역시 자동으로 소스 코드 편집기로 이동 OnBnClickedCheck1() 함수가 자동으로 추가된 상황을 볼 수 있음 사용자가 Visible 체크 상자를 클릭할 때마다 이벤트가 생성되고 OS에 전달되며 OS는 그 때마다 이 함수를 실행 // TODO:… 아래에 다음과 같이 입력 CTRL+F5 눌러서 컴파일, 실행 후 Visible 체크 상자 클릭 입력한 텍스트가 에디트 컨트롤에 표시되면 성공 IDC_EDIT1 : 앞에서 만든 Edit Control의 이름. 오른쪽 아래 속성 패널에서 확인 가능
Visible 체크 상자 클릭 시 작동 UpdateData(FALSE); 변수(소스 코드) -> 컨트롤(화면에 표시) UpdateData(TRUE); 변수 (소스 코드) <- 컨트롤 (화면에 표시)
Enabled체크 상자 클릭 시 작동 Enabled 체크 상자 마우스 오른쪽 단추 클릭 이벤트 처리기 추가 클릭 아래 이벤트 처리기 마법사에서 추가 및 편집 클릭 소스 코드 입력 CTRL+F5 Enabled 체크 상자 클릭해서 확인
작성한 소스 코드 제출 방법 파일 > 솔루션 닫기. 모두 저장 작업한 폴더를 찾아서 압축 생성한 zip 파일을 더블 클릭해서 들어 간 다음 zip 파일 내의 Debug와 Release 폴더 모두 제거(이 폴더는 그 아래 폴더에도 있을 수도 있음. 모두 삭제) 이렇게 지운 후에도 아직 zip 파일 크기가 10MB 이상이라면 다시 전체 zip 파일 내에서 Debug와 Release 폴더 삭제 그 후 zip 파일 제출 (교육 포털 -> 학생 자료실??)