Download presentation
Presentation is loading. Please wait.
Published by보령 명 Modified 6년 전
1
Chapter 06. 공통 대화상자 Section 01 공통 대화상자 클래스 Section 02 색상 대화상자 Section 03 파일 대화상자 Section 04 폰트 대화상자
2
대화 상자기반 응용프로그램을 연습한다. 공통 대화상자를 다루는 방법을 배운다.
3
Section 1. 공통 대화상자 클래스 1.1 공통 대화상자의 용도
공통 대화상자 클래스는 윈도우 프로그램에 포함되는 사용자의 입력을 받아들이기 위해서 흔히 사용되는 대화상자들을 클래스 형태로 미리 만들어 제공되는 클래스다. 그 중에서 가장 흔히 사용되는 것은 파일 대화상자 클래스이다. 메모장, 그림판, MS-Office 등 수많은 프로그램들이 파일 대화상자 사용. 파일을 열거나 저장하기 위해서 사용자에게 파일의 경로를 입력 받기 위한 경우에는 대부분 파일 대화상자를 사용한다.
4
대화상자 기반 응용 프로그램 대화상자 기반 응용 프로그램 대화상자가 메인 윈도우 역할을 하는 응용 프로그램
5
공통 대화상자 (1/7) MFC 클래스 계층도
6
공통 대화상자 (2/7) MFC 공통 대화상자 클래스 MFC 클래스 용도 API 함수 CColorDialog 색상 선택
ChooseColor CFileDialog 파일 열기 또는 저장 GetOpenFileName, GetSaveFileName CFindReplaceDialog 찾기 또는 바꾸기 FindText, ReplaceText CFontDialog 폰트 선택 ChooseFont CPageSetupDialog 페이지 설정(페이지 크기, 방향, 페이지 여백 등) PageSetupDlg CPrintDialog 인쇄 설정(프린터, 인쇄 범위 등) PrintDlg CPrintDialogEx (>MFC 7.0) PrintDlgEx (>윈도우 2000)
7
공통 대화상자 (3/7) CColorDialog dlg; dlg.DoModal();
COLORREF color = dlg.GetColor(); CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN); dlg.DoModal(); COLORREF color = dlg.GetColor();
8
공통 대화상자 (4/7) CFileDialog dlg(TRUE); if(dlg.DoModal() == IDOK)
MessageBox(dlg.GetPathName()); CFileDialog dlg(FALSE); if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName());
9
공통 대화상자 (5/7) CFontDialog dlg; if(dlg.DoModal() == IDOK){
// 선택된 색상을 알아낸다. COLORREF color = dlg.GetColor(); dc.SetTextColor(color); // 선택된 폰트를 알아낸다. LOGFONT lf; dlg.GetCurrentFont(&lf); CFont font; font.CreateFontIndirect(&lf); dc.SelectObject(&font); // 텍스트를 출력한다. dc.TextOut(10, 10, "한글 & English"); }
10
공통 대화상자 (6/7) CPageSetupDialog CPageSetupDialog dlg; dlg.DoModal();
11
공통 대화상자 (7/7) CPrintDialog dlg(TRUE); dlg.DoModal();
CPrintDialog dlg(FALSE); dlg.DoModal();
12
Section 2. 색상 대화상자(CColorDialog)
색상 대화상자 클래스의 생성자는 다음과 같다. 생성자에는 3개의 파라미터들을 사용할 수 있으며, 미리 정의된 값들이 지정되어 있으므로 지정해주지 않더라도 상관은 없다. 즉, CColorDialog 클래스는 다음과 같이 4가지 형식으로 생성하는 것이 가능하다.
13
Section 2. 색상 대화상자(CColorDialog)
COLORREF clrInit 디폴트 색상을 지정하기 위한 파라미터이다. COLORREF 값을 지정하지 않으면 검정색(RGB (0,0,0))으로 지정된다. COLORREF는 RGB 색상을 정의하기 데이터형으로 다음과 같이 정의되어 있다. COLORREF 값을 만들어 주는 매크로가 다음과 같이 정의되어 있다. COLORREF 값에 적용되어 있는 Red, Green, ,Blue 색상들의 농도를 분리해서 획득할 수 있는 함수
14
Section 2. 색상 대화상자(CColorDialog)
DWORD dwFlags 색상 대화상자를 출력할 방식의 조합을 지정하기 위한 파라미터로 다음의 플래그들을 지정할 수 있다.
15
Section 2. 색상 대화상자(CColorDialog)
DWORD dwFlags
16
Section 2. 색상 대화상자(CColorDialog)
2.2 대화상자 화면에 출력하기 MFC에서 제공되는 Dialog들은 모두 DoModal() 함수를 멤버 함수로 가지고 있다. 이 함수를 호출하면 AfxMessageBox() 함수를 사용하여 메시지박스를 출력한 것과 같은 효과를 볼 수 있다. 메시지박스를 닫기 전에는 프로그램을 사용할 수 없는 것과 같이 현재 프로그램의 위에 대화상자가 나타난다.
17
Section 2. 색상 대화상자(CColorDialog)
2.3 선택된 색상 획득하기 GetColor() 멤버 함수 GetColor() 함수는 Ccolor Diloag를 사용하여 선택된 색상의 RGB값을 COLORREF 데이터로 리턴해주는 함수이다. 색상 대화상자를 출력하고, 사용자가 선택한 색상의 R, G, B 값을 메시지박스에 출력하는 코드
18
Section 2.4 색상 대화상자 예제 2.4.1 프로젝트 생성
① Visual Studio 2008을 실행하고, 메인메뉴에서 [파일]-[새로 만들기]-[프로젝트]를 차례로 선택한다. ② 새 프로젝트 대화상자가 나타나면 프로젝트 이름 입력란에 "ColorDlgEx"를 입력하고, [확인] 버튼을 선택한다. ③ [확인] 버튼을 눌러 나타난 화면에서 [다음] 버튼을 눌러 진행하고, 응용 프로그램 종류 대화 상자에서 [대화상자 기반]을 선택한 뒤 [마침] 버튼을 눌러 프로젝트를 생성한다.
19
Section 2.4 색상 대화상자 예제 2.4.2 리소스 편집
① 대화상자 위에 배치되어 있는 Static Text 컨트롤과 버튼 두 개를 마우스로 선택하고, <delete>키를 눌러서 컨트롤을 삭제한다. ② 도구 상자에서 Button 컨트롤을 마우스로 드래그 앤 드롭하여 대화상자에 다음과 같이 배치한다.
20
Section 2.4 색상 대화상자 예제 2.4.2 리소스 편집
③ 추가된 버튼이 선택된 상태에서 속성 창의 Caption 항목을 선택하여 "색상선택"을 입력하여 버튼의 캡션을 변경한다.
21
Section 2.4 색상 대화상자 예제 2.4.3 소스코드 작성
① 색상 대화상자에서 선택된 색상 값을 저장할 COLORREF 변수를 ColorDlgExDlg.h 파일에 다음과 같이 선언한다. (멤버 변수 선언) ② 대화상자에 추가한 [색상선택] 버튼을 마우스로 더블클릭하여 버튼 이벤트 함수를 만든다. 버튼 이벤트 함수가 추가되면 다음과 같이 추가된 함수의 영역으로 자동으로 마우스 포인터를 위치시킨다.
22
Section 2.4 색상 대화상자 예제 2.4.3 소스코드 작성
③ 추가된 버튼 이벤트 함수에 색상 대화상자를 출력하고, [확인] 버튼을 누르면 선택된 색상 값을 m_color 변수에 저장하는 코드를 작성한다. ④ ColorDlgExDlg.cpp 파일의 OnPaint() 함수의 내용을 모두 삭제하고, 코드를 다음과 같이 입력한다.
23
Section 2.4 색상 대화상자 예제 2.4.4 프로그램 빌드 및 실행
① 메뉴에서 [빌드]-[솔루션 빌드]를 차례대로 선택하거나 단축키 키를 눌러서 솔루션을 빌드한다. ② 메뉴에서 [디버그]-[디버깅하지 않고 시작]을 차례대로 선택하여 빌드된 프로그램을 실행한다.
24
Section 3 파일 대화상자(CFileDialog)
MFC에서 제공하는 파일 대화상자 클래스의 이름은 CFileDialog이다. CFileDialog 클래스는 다른 공통 대화상자들에 비해서 생성자에 파라미터가 많다. 파라미터를 입력하지 않으면 기본 설정으로 사용할 수 있으며, 멤버 함수들을 사용하여 각각의 설정을 변경할 수 있다.
25
Section 3 파일 대화상자(CFileDialog)
bOpenFileDialog 파일을 열기 위해서 사용할지 저장하기 위해서 사용할지를 선택하기 위한 파라미터이다. TRUE로 선택하면 열기 용도로, FALSE로 선택하면 저장하기 용도로 생성된다. lpszDefExt 기본으로 사용할 파일 확장자를 입력하기 위한 파라미터이다. lpszFileName 파일 대화상자가 나타날 때 초기화할 파일 이름을 입력하기 위한 파라미터이다. NULL로 입력되면 파일 이름 입력란에 아무것도 나타나지 않는다.
26
Section 3 파일 대화상자(CFileDialog)
dwFlags 파일 대화상자의 여러 가지 옵션들을 설정하기 위한 플래그이다. 두 개 이상의 값들을 결합하여 사용할 수 있으며, 정의되어 있는 플래그들의 리스트는 다음과 같다.
27
Section 3 파일 대화상자(CFileDialog)
lpszFilter 확장자를 지정하여 파일 대화상자에 표시될 파일들을 구분해 내기 위해서 사용하는 파라미터이다. pParentWnd 파일 대화상자의 부모 윈도우를 지정하기 위한 포인터이다. dwSize OPENFILENAME 구조체의 사이즈이다.
28
Section 3 파일 대화상자(CFileDialog)
29
Section 3.3 CFileDialog 사용하기
3.3.1 파일 열기 대화상자 파일 열기 대화상자는 CFileDilaog 클래스 생성자의 첫 번째 파라미터를 TRUE로 설정하면 생성할 수 있다.
30
Section 3.3 CFileDialog 사용하기
3.3.2 파일 저장 대화상자 파일 저장 대화상자는 CFileDialog 클래스 생성자의 첫 번째 파라미터를 FALSE로 설정하면 생성할 수 있다.
31
Section 3.4 파일 대화상자 예제 3.4.1 프로젝트 생성
① Visual Studio 2008을 실행하고, 메인 메뉴에서 [파일]-[새로 만들기]-[프로젝트]를 차례대로 선택한다. ② 새 프로젝트 대화상자가 나타나면 프로젝트 이름 입력란에 "FileDlgEx"를 입력하고, [확인] 버튼을 선택한다. ③ [확인] 버튼을 눌러 나타난 화면에서 [다음] 버튼을 눌러 진행하고, 응용 프로그램 종류 대화상자에서 [대화상자 기반]을 선택한다. [유니코드 라이브러리 사용] 항목을 선택 해제하고, [마침] 버튼을 눌러 프로젝트를 생성한다.
32
Section 3.4 파일 대화상자 예제 3.4.2 리소스 편집
① 대화상자에 배치되어 있는 컨트롤들을 마우스로 선택한 뒤 <delete>키를 눌러서 모두 삭제한다. ② 도구 상자에서 버튼 컨트롤 2개를 드래그&드롭하여 FileDialogEx 대화상자에 추가하고, 대화상자의 사이즈를 적당히 조절한다. ③ 추가된 버튼의 캡션을 "파일열기", "파일저장"으로 변경한다.
33
Section 3.4 파일 대화상자 예제 3.4.3 파일 열기 대화상자 사용코드 추가
① 리소스 편집화면에서 추가된 [파일열기] 버튼을 더블클릭하여 버튼클릭 이벤트 함수를 추가한다. ② 추가된 [파일열기] 버튼의 버튼 클릭 함수인 OnBnClickedButton1() 함수에 다음과 같이 코드를 작성한다.
34
Section 3.4 파일 대화상자 예제 3.4.4 파일 저장 대화상자 사용코드 추가
① 리소스 편집화면에서 추가된 [파일저장] 버튼을 더블클릭하여 버튼 클릭 이벤트 함수를 추가 한다. ② 추가된 [파일저장] 버튼의 버튼 클릭 함수인 OnBnClickedButton2() 함수에 다음과 같이 코드를 작성한다.
35
Section 3.4 파일 대화상자 예제 3.4.5 프로그램 빌드 및 테스트
파일 열기 대화상자와 파일 저장 대화상자를 사용하는 예제 프로그램의 작성이 완료되었다. 단축키 F7키를 눌러서 프로그램을 빌드하고, <ctrl>+<F5> 키를 눌러 빌드된 프로그램을 실행해 보자.
36
Section 4 폰트 대화상자(CFongDialog)
3.4.5 프로그램 빌드 및 테스트 워드 프로세서 프로그램이 아니더라도 문자열을 사용하고, 편집할 수 있는 프로그램들은 대부분 폰트를 설정할 수 있는 방법들을 제공해 주고 있다. MFC에서도 폰트를 설정하기 위해서 사용되는 폰트 대화상자를 클래스로 만들어 제공하고 있다
37
Section 4 폰트 대화상자(CFongDialog)
4.1 CFontDialog 생성자 lplfInitial LOGFONT는 폰트 정보를 담기 위한 구조체로 WinGDI.h 파일에 다음과 같이 정의되어 있다.
38
Section 4 폰트 대화상자(CFongDialog)
4.1 CFontDialog 생성자 dwFlags pdcPrinter 프린터 DC의 포인터 pParentWnd 폰트 대화상자의 부모 윈도우로 지정할 윈도우의 포인터
39
Section 4 폰트 대화상자(CFongDialog)
4.2 CFontDialog 멤버 함수 폰트 대화상자 클래스인 CFontDialog 클래스는 폰트와 관련하여 유용한 멤버 함수들을 포함하고 있다.
40
Section 4.3 CFontDialog 실습 예제
4.3.1 프로젝트 생성 ① Visual Studio 2008을 실행하고, 메인 메뉴에서 [파일]-[새로 만들기]-[프로젝트]를 차례대로 선택한다. ② 새 프로젝트 대화상자가 나타나면 프로젝트 이름 입력란에 "FontDialogEx"를 입력하고, [확 인] 버튼을 선택한다. ③ [확인] 버튼을 눌러서 나타난 화면에서 [다음] 버튼을 눌러 진행하고, 응용 프로그램 종류 대화상자에서 [대화상자 기반]을 선택한다. [유니코드 라이브러리 사용] 항목을 선택 해제하고, [마침] 버튼을 눌러 프로젝트를 생성한다.
41
Section 4.3 CFontDialog 실습 예제
4.3.2 리소스 편집 대화상자에 배치되어 있는 리소스들을 마우스로 선택하여 키를 눌러 모두 삭제한 후 도구 상자에서 버튼 컨트롤을 드래그&드롭하여 대화상자 위에 버튼 두 개를 배치한다. 추가된 두 개의 버튼들의 캡션을 [폰트 정보보기], [문자열 출력]으로 변경한다.
42
Section 4.3 CFontDialog 실습 예제
4.3.3 소스코드 추가 ① 리소스 편집 창에서 [폰트 정보보기] 버튼을 마우스로 더블클릭하여 버튼 이벤트 함수 OnBnClickedButton1() 함수를 생성한다. ② 생성된 버튼 이벤트 함수에 폰트 대화상자를 출력하고, [확인] 버튼이 눌렸을 경우 선택된 폰트 정보를 메시지 박스에 출력하는 코드를 작성한다.
43
Section 4.3 CFontDialog 실습 예제
4.3.3 소스코드 추가 ③ 리소스 편집 창에서 [문자열 출력] 버튼을 마우스로 더블클릭하여 버튼 이벤트 함수 OnBnClickedButton2() 함수를 생성한다. ④ 생성된 버튼 이벤트 함수에 폰트 대화상자를 출력하고, [확인] 버튼이 눌렸을 경우 선택된 폰트 정보가 적용된 문자열을 화면에 출력하는 코드를 작성한다.
44
Section 4.3 CFontDialog 실습 예제
4.3.4 프로그램 빌드 및 실행 단축키 <F7>키를 눌러서 작성된 프로그램을 빌드하고 에러 없이 빌드가 완료되었으면 단축키 <ctrl>+<F5> 키를 눌러서 빌드된 프로그램을 실행해 보자. [폰트 정보보기] 버튼을 눌러서 나타나는 대화상자에서 글꼴, 크기, 색 정보들을 리스트에 출력되어 있는 내용들 중에서 마음대로 선택하여 변경해 보자.
45
Section 4.3 CFontDialog 실습 예제
4.3.4 프로그램 빌드 및 실행 폰트 정보 변경이 완료되었으면 [확인] 버튼을 누르면 선택된 폰트 정보들이 메시지 박스에 출력되는 것을 확인할 수 있다. 폰트 정보를 확인하는 버튼의 기능이 정상적으로 동작되는 것을 확인하였다면 [문자열 출력] 버튼을 선택해 보자.
46
실습응용문제 아래와 같이 공통다이얼로그 메뉴를 생성한다. 페이지설정 ID_COMMON_PAGE 없음 캡션 ID 속성
공통다이얼로그 없음 Pop-up 색상 ID_COMMON_COLOR 없음 파일 ID_COMMON_FILE 없음 폰트 ID_COMMON_FONT 없음 페이지설정 ID_COMMON_PAGE 없음 프린트 ID_COMMON_PRINT 없음
47
실습 #1(CColorDialog) 공통다이얼로그 메뉴에서 색상 항목 선택시 선택한 색상으로 (100, 100)위치에서 테두리가 검정색인 가로 300, 세로 300인 사각형을 그린다.
48
실습 #2(CFileDialog) 공통다이얼로그 메뉴에서 파일 항목 선택시 파일열기 다이얼로그를 띄운후 선택한 파일을 메시지박스로 출력한다.
49
실습 #3(CFontDialog) 공통다이얼로그 메뉴에서 폰트 항목 선택시 해당폰트로 학과의 이름을 100, 100 위치에 출력한다.
50
실습 #4(CPageSetupDialog)
공통다이얼로그 메뉴에서 페이지설정 항목 선택시 인쇄 미리보기 화면을 띄우시오
51
실습 #5(CPrintDialog) 공통다이얼로그 메뉴에서 프린트 항목 선택시 인쇄설정 화면을 띄우시오
Similar presentations