Uploaded by 유일선

3주차 대화상자

advertisement
제4장 대화상자
4.1 CDialogEx 클래스
4.2 대화상자 기반의 프로그램
실습 4-1 MFC 기본 컨트롤 사용법 익히기
4.3 모달 대화상자와 모덜리스 대화상자
4.4 공용 대화상자
실습 4-2 단위 변환프로그램 만들기
대화상자(dialog)

CDialogEx 클래스
• 대화상자는 CDialogEx 클래스로 정의
• 모든 윈도우 메시지 처리 가능
• 배경색과 배경그림 바꾸는 기능 추가
• SetBackgroundColor()
• SetBackgroundImage()
대화상자(dialog)

대화상자의 계층도
대화상자(dialog)

다이얼로그 기반의 프로그램
• 애플리케이션 클래스와 다이얼로그 클래스
로 구성
클래스
기저 클래스
설명
애플리케이션 클래스
CWinApp
프로젝트 전체를 관리하는 클래스
다이얼로그 클래스
CDialogEx
대화상자의 기능을 구현하는 실제적인 클
래스
도움말 대화상자 클래
스
CDialogEx
도움말 정보 클래스
대화상자(dialog)

대화상자 프로그램의 동작
MFC 기본 컨트롤

Static Text
• 화면에 문자열을 배치할 때 사용하는 컨트롤

Edit Control
• 문자열을 입력하고 편집할 수 있는 컨트롤
 Group Box
• 서로 연관된 컨트롤을 시각적으로 그룹 지어 다
른 컨트롤과 구분하는 용도로 사용
• 그룹 박스로 묶는다고 기능은 변경되지 않음
MFC 기본 컨트롤

Button Control
• 마우스로 클릭하여 어떤 동작을 수행하는 용도
로 사용하는 컨트롤

Check Box
• 버튼 컨트롤의 일종으로 독립적인 옵션을 선택
할 때 사용하는 컨트롤
• 마우스로 클릭하면 체크표시가 on/off 됨
• 여러 옵션 중 임의의 개수를 선택할 때 사용
MFC 기본 컨트롤

Radio Button
• 버튼 컨트롤의 일종으로 상호 배타적인 옵션을
선택할 때 사용하는 컨트롤
• 마우스로 클릭하면 라디오 표시가 on/off 됨
• 여러 옵션 중 하나 만 선택할 때 사용

List Box
• 여러 개의 선택 항목을 나열하고 선택할 수 있
도록 해주는 컨트롤
• 하나 도는 여러 개를 선택할 수 있음
MFC 기본 컨트롤

Combo Box
• 리스트 박스의 단점을 해결한 것으로 에디트 컨
트롤과 리스트 박스를 합쳐 놓은 모양
• 기존의 항목을 선택할 때는 아래의 리스트 박스
에서 선택
• 직접 입력할 경우는 에디트 컨트롤에서 입력할
수 있음
• 리스트 박스를 평소에 닫아두기 때문에 화면면
적을 넓게 차지하지 않음.
실습 4-1MFC 기본 컨트롤 사용법
MFC 에서 가장 많이 사용되는 기본 컨트
롤들을 이용하여 메인 대화상자를 만들고
 사용자들의 컨트롤 사용에 따라 컨트롤의
동작을 List Box에 출력하고 Combo Box
에 저장하고 삭제할 수 있는 프로그램을
작성

실습 4-1
• 실행 결과
실습 4-1프로그램 작성 순서
①
②
•
①
②
다이얼로그 기반의 프로젝트 생성한다.
메인 대화상자의 폼을 구성한다.
컨트롤들을 배치하고 속성을 설정한다.
컨트롤들을 멤버 변수와 연결한다.
각 컨트롤에 대한 메시지 핸들러 함수를 생
성
③ 프로그램을 실행한다
실습 4-1대화상자의 폼 구성
• 왼쪽의 컨트롤 도구상자에서 컨트롤들을 선택
하여 오른쪽 대화상자와 같이 배치한다.
실습 4-1컨트롤을 멤버변수와 연결하는 방법
1) DDX를 이용하는 방법
• Value :
• 컨트롤에 설정되어 있는 값만 연결
• DDX_Text 계열 함수를 이용하여 자원에 연결
• Control :
• 해당 컨트롤을 제어할 수 있는 컨트롤 클래스
와 연결
• DDX_Control 계열 함수를 이용하여 자원에
연결
실습 4-1컨트롤을 멤버변수와 연결하는 방법
2)컨트롤의 핸들로 클래스와 연결하는 방법
• 컨트롤의 핸들을 얻기 위해 컨트롤의 포인터를
•
•
•
받을 포인터 변수를 선언
GetDlgItem() 함수를 이용하여 컨트롤의 포인
터를 선언된 포인터 변수에 치환한다.
클래스의 멤버를 이용하여 컨트롤을 다룬다.
예)
CListBox *pList;
pList = (CListBox *)GeDlgItem(IDC_LIST1);
pList->AddString(“데이터”);
실습 4-1Visual C++에서 DDX로 연결하는 방
법
① 클래스 마법사에서 [멤버 변수]탭에서 컨트
롤 ID를 선택하고 [변수추가]버튼을 누른다
② Ctrl키를 누른 상태에서 해당 컨트롤을 더블
클릭한다.
• [멤버 변수 이름] 항목에 멤버 변수 이름을
•
•
입력
[범주]항목에서 value로 연결할 것이지
control를 연결할 것인지 선택
Value로 연결할 경우 변수형식을 선택
DoDataExchange() 함수
• 대화상자의 여러 자원을 연결하는 기능을 하
는 함수
• 이 함수 안에는 DDX_Text 함수나
DDX_Control 함수를 이용하여 자원과 연결
• DDX_Control 형태로 연결되었을 경우는 변
수가 클래스로부터 상속 받았으므로 클래스의
멤버 함수를 마음대로 사용할 수 있다.
UpdateData() 함수
• DDX_Value 형태로 연결되었을 경우는
UpdateData() 함수를 사용하여 자원을 update
하여야 한다.
• 컨트롤에 있는 데이터를 변수에 가져오고자 한
다면 UpdateData(TRUE)를 사용한다.
• 변수에 특정 값을 주고 그 값을 컨트롤에 보내고
싶다면 UpdateData(FALSE)를 사용한다.
CListBox 클래스의 주요 멤버 함수
• GetCount( )함수
• ListBox의 아이템 수를 알기 위해 사용하는 함
수
• AddString( ) 함수
• ListBox의 맨 뒤에 문자열을 추가할 때 사용하
는 함수
• GetText( )함수
• ListBox로부터 문자열을 얻어올 때 사용되는
함수
• DeleteString( ) 함수
• ListBox의 아이템을 삭제할 때 사용하는 함수
CComboBox 클래스의 주요 멤버 함수
• ResetContent( )함수
• ComboBox의 모든 아이템을 제거할 때 사용
하는 함수
• AddString( ) 함수
• ComboBox의 맨 뒤에 문자열을 추가할 때 사
용하는 함수
• GetCurSel( )함수
• ComboBox에서 선택된 항목의 색인을 반환하
는 함수
대화상자 (dialog)
모달(Modal) 대화상자
 모덜리스(Modeless) 대화상자

모달(Modal) 대화상자
• 모달 대화상자가 출력되면 부모 윈도우에서
작업을 할 수 없다.
• 모달 대화상자를 닫아야 부모 윈도우에 포커
스를 둘 수 있다.
• DoModal()함수를 이용하여 출력한다.
모덜리스(Modeless) 대화상자
• 모달 대화상자와는 달리 모덜리스 대화상자
는 닫지 않고도 애플리케이션 내의 다른 윈도
우에서 작업할 수 있고 다시 대화상자로 돌아
와 작업할 수 있는 대화상자
• 모덜리스 대화상자의 생성 방법
① 대화상자에 대한 변수 선언
② Create()함수를 이용하여 대화상자 생성
③ 생성한 대화상자를 화면에 표시
모덜리스 대화상자의 생성의 예

CExDialogDlg m_Dlg;
① m_Dlg.Create(IDD_EXDIALOG, this);
…..
③ m_Dlg.ShowWindow(SW_SHOW)
• Create()의 첫 번째 인수는 대화상자의 ID
• Create()의 두 번째 인수는 부모 윈도우의 포
인터
공용 대화상자
• File 대화상자
• CFileDialog 클래스로 정의
• 생성자 함수에서 다음과 같이 호출
CFileDialog pDlg(TRUE);
pDlg.DoModal();
• TRUE : Open 대화상자, FALSE : SaveAS 대화상자.
공용 대화상자

CFileDialog의 생성자 함수
CFileDialog(
BOOL
LPCTSTR
LPCTSTR
DWORD
LPCTSTR
CWnd*
);
bOpenFileDialog,
lpszDefExt = NULL,
lpszFileName = NULL,
dwFlags = OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT,
lpszFilter = NULL,
pParentWnd = NULL
공용 대화상자

Open 대화상자 출력 예
char Filter[ ] = "Text File(*.txt) | *.txt| 모든 파일(*.*)|*.*|";
CFileDialog pDlg(TRUE, "text file(*.txt)", "*.txt",
OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, Filter,
NULL);
if(pDlg.DoModal() == IDOK)
{
data = pDlg.GetPathName();
…
…
…
}
공용 대화상자

Save 대화상자 출력 예
char Filter[ ] = "Text File(*.txt) | *.txt| 모든 파일(*.*) |*.*|";
CFileDialog pDlg(FALSE, "text file(*.txt)", "*.txt",
OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, Filter,
NULL);
if(pDlg.DoModal() == IDOK)
{
data = pDlg.GetPathName();
…
…
…
}
공용 대화상자
• Font 대화상자
• 주로 텍스트 기반 애플리케이션에서 사용
• Font 대화상자는 텍스트의 글꼴, 크기, 문자 속성 등을
지정할 수 있는 대화상자
• 해당 클래스는 CFontDialog
공용 대화상자

Font 대화상자 출력하는 방법
CFontDialog fontDlg;
fontDlg.DoModal();

Font를 받는 방법
• 폰트 구조체로 받음
LOGFONT logfont;
fontDlg.GetCurrentFont(&logfont);
• 실제 글꼴 생성
CFont font;
font.CreateFontIndirect(&logfont);
• 현재 DC의 글꼴을 선택함으로써 글꼴을 사용할 수 있
다
공용 대화상자
• Color 대화상자
• 사용자에게 색상을 선택하게 하는 대화상자
• 해당 클래스는 CColorDialog
공용 대화상자

Color 대화상자 사용법
CColorDialog colorDlg;
If (colorDlg.DoModal() == IDOK)
{
COLORREF m_color = colorDlg.GetColor();
}
실습 4-2

단위 변환 프로그램 만들기
• 대화상자 기반으로 하여 단위 변환이 가능한 대
화상자를 만들고 변환 단위 표를 열람하는 프로
그램을 작성할 것
• Edit Control를 통해 현재 값을 입력하고,
ComboBox에 저장 되어있는 단위들을 선택하
여 현재 단위에서 다른 단위로 변환이 가능하게
할 것이
• 변환하고 싶은 단위 표를 열람하기 위해서 모
덜리스 대화상자를 이용할 것
실습 4-2
• 실행 결과
실습 4-2

프로그램 작성 순서
1) 대화상자 기반의 프로젝트 생성한다.
2) 메인 대화상자의 폼을 구성한다.
• 컨트롤들을 배치하고 속성을 설정한다.
3) 각각 컨트롤들을 멤버 변수와 연결한다.
4) Radio Button 컨트롤에 대한 메시지 핸들러
함수를 생성
5) 값을 변환하기 위한 Button 컨트롤에 대한 메
시지 핸들러 함수를 생성
실습 4-2
6) 변환 단위표를 열람할 수 있는 모덜리스 대화
상자를 생성
• 새로운 대화상자를 생성하고, 속성을 설정
• 새로 생성된 대화상자에 컨트롤을 배치
• 새로 만든 대화상자 자원을 다룰 클래스를 생
성
7) 모덜리스 형식으로 [변환 단위표]를 출력
8) 프로그램을 실행한다
CWnd 클래스 멤버 함수
• GetWindowRect( ) 함수
• 윈도우의 크기를 알기 위해 사용하는 함수
• MoveWindow( ) 함수
• 윈도우의 위치와 크기를 변경하는 함수
연습문제 4-1

표준 컨트롤을 이용한 데이터 이동 가능
대화상자 만들기
• 대화상자에 있는 버튼을 이용하여 에디트 박
스에 데이터를 입력하고 배치되어 있는 버튼
을 누르면 데이터가 이동, 복사가 되는 간단
한 데이터 복사 이동 프로그램을 작성하라.
연습문제 4-1
• 실행 결과
데이터 입력 및 복사
데이터 입력 및 이동
Download