3. 기초 프로그래밍

Download Report

Transcript 3. 기초 프로그래밍

3장. VC++ MFC 기초 프로그래밍
3. 기초 프로그래밍
3. 표준 컨트롤
–
–
표준화된 형태와 특성의 윈도우 프로그래밍 도구
사용자의 입력을 받거나 정보를 보여줌
컨트롤
MFC 클래스
버튼 컨트롤
CButton
정적 컨트롤
CStatic
편집 컨트롤
CEdit
리스트 박스 컨트롤
CListBox
콤보 박스 컨트롤
CComboBox
스크롤 바 컨트롤
CScrollBar
컨트롤 버튼
3. 기초 프로그래밍
3.1 버튼 컨트롤
클릭 이벤트가 발생하면 동작하는 컨트롤
버튼 이름을 바꾸려면 속성창에서
Caption 항목을 다른 이름으로 바꾼다.
종류
3. 기초 프로그래밍

실습 1 : 버튼 컨트롤과 메시지 상자
두 개의 버튼을 만들고 아래의 기능을 부여한다.
 『출력』 버튼을 누르면 메시지 상자를 표시한다.
 『종료』 버튼을 누르면 프로그램을 종료한다.
3. 기초 프로그래밍

따라하기
1. 새로 MFC 응용프로그램 프로젝트를 생성한다. (이름 : ex1)
ex1
3. 기초 프로그래밍
2. 응용프로그램 종류를 [대화 상자 기반]으로 [유니코드
라이브러리 사용]을 체크 해제하고 [마침]을 클릭한다.
3. 기초 프로그래밍
3. 화면에 있는 컨트롤들을 클릭한 후 [Del] 키를 눌러
삭제하여 깨끗하게 한다.
3. 기초 프로그래밍
4. 컨트롤 도구 모음에서 Button을 클릭한 후
다이얼로그 상자에 드래그 하여 버튼을
만든다.
3. 기초 프로그래밍
5. 우측 하단 속성창에서 Caption을 [Button1] 에서 [출력]으로
바꾼다.
ID는 자동으로 주어지는 기본값을
그냥 사용해도 무방하다.
‘출력’ 으로 바꾼다.
3. 기초 프로그래밍
6. 마찬가지로 버튼을 하나 더 추가하고 속성창에서 Caption을
[종료]로 바꾼다.
3. 기초 프로그래밍
7. 출력 버튼을 더블 클릭하고 다음의 코드를 추가한다.
대문자, 소문자 주의!
MessageBox(“메시지상자”, “출력”);
3. 기초 프로그래밍

메시지 상자 : MessageBox() 함수

간단한 메시지 및 선택 버튼을 표시하기 위한 별도의 창
MessageBox(메시지, 제목, 버튼유형);
①
②
②

생략하면 MB_OK로
자동 지정
①

버튼유형 : MB_OK, MB_OKCANCEL
3. 기초 프로그래밍
* 버튼 유형 ( ICON )
[위험] MB_ICONHAND
또는 MB_ICONSTOP
[물음] MB_ICONQUESTION
[정보] MB_ICONINFORMATION
또는 MB_ICONASTERISK
[경고] MB_ICONEXCLAMATION
3. 기초 프로그래밍
8. 마찬가지로 종료 버튼을 더블 클릭하고 다음의 코드를 추가한다.
메지시상자 종료를 의미
OnOK();
3. 기초 프로그래밍
9. 메뉴에서 [디버그] – [디버깅 시작] 혹은
실행해 본다.
버튼을 클릭해
3. 기초 프로그래밍

추가 실습
- 종료버튼을 누르면 종료확인 창이 뜨고 [확인]을 누르면 종료되고,
[취소]를 누르면 종료 취소가 되도록 해 본다.
if (MessageBox("종료할까요?.","종료확인", MB_OKCANCEL) == IDCANCEL)
{
MessageBox("종료취소","알림");
}
else
{
OnOK();
}
3. 기초 프로그래밍

if 문 ( C언어와 동일 )

조건식에 따라 분기
if (조건식 )
{
문장;
}
if (score < 60 )
{
printf(“불합격입니다.\n”);
}
3. 기초 프로그래밍

if - else 문
if (조건식 )
{
문장1;
}
else
{
문장2;
}
if (score < 60 )
{
printf(“불합격입니다.\n”);
}
else
{
printf(“합격입니다.\n”);
}
3. 기초 프로그래밍

다중 if 문
if (조건식 1)
{
문장1;
}
else if (조건식 2)
{
문장2;
}
else if (조건식 3)
{
문장3;
}
else
{
문장4;
}
3. 기초 프로그래밍

실습 2 : 버튼 컨트롤 기능 활용
다섯 개의 버튼을 만들고 아래의 기능을 부여한다.
 『제목 바꾸기』 버튼을 누르면 대상버튼을 안녕하세요? 로 바꾼다.
 『숨기기』 버튼을 누르면 대상버튼을 숨기고 반대로 『보이기』 를
누르면 다시 나타나게한다.
 『사용 못하게함』 을 누르면 버튼을 비활성화 한다.



3. 기초 프로그래밍

따라하기
1. 새로 MFC 응용프로그램 프로젝트를 생성한다. (이름 : Button)
3. 기초 프로그래밍
2.
응용프로그램 종류를 [대화 상자 기반]으로 [유니코드
라이브러리 사용]을 체크 해제하고 [마침]을 클릭한다.
3. 기초 프로그래밍
3.
화면에 있는 컨트롤들을 클릭한 후 [Del] 키를 눌러 삭제하여
깨끗하게 한다.
3. 기초 프로그래밍
4. 컨트롤 도구 모음에서 Button을 클릭한 후 아래와 같이 만든다.
IDC_BUTTON1
버튼 ID는 자동으로생성됨
IDC_BUTTON2
IDC_BUTTON3
IDC_BUTTON4
IDC_BUTTON5
3. 기초 프로그래밍
5.
버튼을 더블 클릭하고 다음의 코드를 추가한다.
void CButtonDlg::OnClickedButton2()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
static int x;
}
static 으로 변수 선언을 하면 프로그램이 실행되는 동안 변수 상태가 계속 유지된다.
만약 x값이 0이라면
if (x == 0)
{
GetDlgItem(IDC_BUTTON1)->SetWindowText("안녕하세요?");
x=1;
}
else
{
GetDlgItem(IDC_BUTTON1)->SetWindowText("대상 버튼");
x=0;
}
GetDlgItem 함수 -> 컨트롤 번호를 얻는데 사용
3. 기초 프로그래밍

GetDlgItem 함수
* GetDlgItem(컨트롤 ID) : 컨트롤의 핸들(고유번호)값을 알아내는 함수
- SetWindowText(“값”)
- ShowWindow(TRUE/FALSE)
- EnableWindow(TRUE/FALSE)
: 컨트롤 Caption 지정
: 컨트롤 보이기/숨기기
: 컨트롤 사용 가능/불가능
* 사용 예 :
GetDlgItem(IDC_BUTTON1) -> ShowWindow(FALSE);
3. 기초 프로그래밍
6.
버튼을 더블 클릭하고 다음의 코드를 추가한다.
void CButtonDlg::OnClickedButton3()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
static int x;
ShowWindow() 함수값이 TRUE일 때 보이고 FALSE에 숨김
if (x == 0)
{
GetDlgItem(IDC_BUTTON1)->ShowWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->SetWindowText("보이기");
x=1;
}
else
{
GetDlgItem(IDC_BUTTON1)->ShowWindow(TRUE);
GetDlgItem(IDC_BUTTON3)->SetWindowText("숨기기");
x=0;
}
}
3. 기초 프로그래밍
7.
버튼을 더블 클릭하고 다음의 코드를 추가한다.
void CButtonDlg::OnClickedButton4()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
static int x;
EnableWindow() 함수값이 TRUE일 때 사용, FALSE에 사용불가
if (x == 0)
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->SetWindowText("사용 하게함");
x=1;
}
else
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON4)->SetWindowText("사용 못하게함");
x=0;
}
}
3. 기초 프로그래밍
8.
버튼을 더블 클릭하고 다음의 코드를 추가한다.
void CButtonDlg::OnClickedButton5()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
OnOK();
다이얼로그 상자 종료
}
9.
실행 후 결과를 확인해 본다.
3. 기초 프로그래밍
3.2 에디터 상자 (Edit Control)
문자열을 입력하거나 반대로 화면에
표시하는데 사용.
UpdateData() 함수와 함께 사용된다. (중요!)
UpdateData(TRUE) : 컨트롤 값을 변수로 보내고 갱신
UpdateData(FALSE) : 변수 값을 컨트롤에 보내고 갱신
사용 예 :
UpdateData(TRUE);
(에디터 상자 관련 코드)
UpdateData(FALSE);
3. 기초 프로그래밍

실습 3 : 에디터상자 활용
다음과 같이 에디터상자 2개와 버튼을 만들고 아래의 기능을 부여한다.
 위쪽 에디터상자에 문자를 입력하면 아래에 똑같이 표시된다.
 『지우기』 버튼을 누르면 내용을 모두 지운다.
3. 기초 프로그래밍

따라하기
1. 새로 MFC 응용프로그램 프로젝트를 생성한다. (이름 : EDIT)
3. 기초 프로그래밍
2.
응용프로그램 종류를 [대화 상자 기반]으로 [유니코드
라이브러리 사용]을 체크 해제하고 [마침]을 클릭한다.
3. 기초 프로그래밍
3.
화면에 있는 컨트롤들을 클릭한 후 [Del] 키를 눌러 삭제하여
깨끗하게 한다.
3. 기초 프로그래밍
4. 컨트롤 도구 모음을 이용하여 아래와 같이 만든다.
IDC_EDIT1
IDC_EDIT2
IDC_BUTTON1
Caption : 지우기
3. 기초 프로그래밍
5. 첫 번째 에디터 상자를 우측 마우스 클릭한 후 클래스 마법사
를 클릭한다.
중요
3. 기초 프로그래밍
6. 클래스마법사 창이 뜨면 [멤버변수] 탭을 누르고 IDC_EDIT1에 대
하여 [변수 추가] 를 한다.
에디터 상자에 입력된 내용을 임시로
저장할 변수를 만든다.
변수
문자나 숫자 등을
임시로 넣어두기
위한 저장공간
3. 기초 프로그래밍
7. 멤버 변수 이름을 m_Edit1, 범주를 Value로, 변수형식을
CString으로 하고 [확인]을 누른다.
m_Edit1
변수 m_Edit1에 문자를
넣겠다는 의미
3. 기초 프로그래밍

변수 형식
홍길동
m_Edit1
문자열 저장
500
실수값
m_Edit1
정수값 저장 ( -32,768 ~ 32,767)
정수값 (-2,147,483,648 ~ 2,147,483,647)
3. 기초 프로그래밍
8.
IDC_Edit2에 대해서도 멤버 변수 이름을 m_Edit2, 범주를
Value로, 변수형식을 CString으로 한다.
m_Edit2
3. 기초 프로그래밍
9. 첫 번째 에디터 상자 를 더블 클릭하고 다음의 코드를 추가한다.
void CEDITDlg::OnChangeEdit1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.



UpdateData(TRUE);
컨트롤값을 변수로 보내고 갱신
m_Edit2 = m_Edit1;
위 에디터상자 변수값을 아래 에디터상자로
UpdateData(FALSE);
변수값을 컨트롤로 보내고 갱신
}

m_Edit1

m_Edit2

3. 기초 프로그래밍
10. [지우기] 버튼을 더블 클릭하고 아래 코드를 추가한다.
void CEDITDlg::OnClickedButton1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
m_Edit2 = "";
m_Edit1 = "";
}
UpdateData(FALSE);
11. 실행 후 결과를 확인해 본다.
변수값을 모두 지운다.
3. 기초 프로그래밍

연습문제 1
–
아래와 같이 종료버튼을 추가하고 실제 종료되도록 해 본다.
3. 기초 프로그래밍

연습문제 2-1
–
출력버튼을 추가하고 입력한 내용이 출력 버튼을 클릭해야만
아래쪽에 한꺼번에 표시되도록 해 본다.
클릭!
3. 기초 프로그래밍

연습문제 2-2
–
확인버튼을 클릭하면 입력점수에 따라 3개의 등급으로 표시
되도록 해 본다.
클릭!
3. 기초 프로그래밍
힌트 :
숫자를 입력받아
조건식에서 판별
해야 하므로
3. 기초 프로그래밍
if (m_Edit1 >= 80)
{
m_Edit2 = "Good";
}
else if (m_Edit1 >= 60)
{
m_Edit2 = "Pass";
}
else
{
m_Edit2 = "Fail";
}
3. 기초 프로그래밍

연습문제 2-3
–
더하기를 누르면 덧셈 ( m_Edit1 + m_Edit2 = m_Edit3 )이 되
도록 해 본다.
m_Edit1
m_Edit2
m_Edit3
클릭!