Microsoft PowerPoint _대화상자.ppt

Similar documents
<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - hci2-lecture9.ppt

그래픽 프로그래밍

윈도우시스템프로그래밍

윈도우시스템프로그래밍

윈도우 프로그래밍의 개념

[제1강] 텍스트를 입력하세요

윈도우 프로그래밍의 개념

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint _파일입출력.ppt

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - CPP_chap3

Programming hwp

5장 MFC기반 다지기

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

DLL(Dynamic Linked Library)

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

Microsoft PowerPoint - CPP_chap6_interface(2)

윈도우시스템프로그래밍

Microsoft Word - hci08-final-answer.doc

Microsoft Word - hci07-final-answer.doc

Chapter 1. MFC 시작하기

Visual C++의 개요

PowerPoint 프레젠테이션

PowerPoint Presentation

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - CSharp-10-예외처리

윈도우시스템프로그래밍

오버라이딩 (Overriding)

Programming hwp

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

PowerPoint 프레젠테이션

Lab 3. 실습문제 (Single linked list)_해답.hwp

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

untitled

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-2pointer.ppt

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B

PowerPoint 프레젠테이션

설계란 무엇인가?

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Visual Basic 반복문

Programming hwp

歯Lecture2.PDF

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

삼성955_965_09

PowerPoint Template

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

윈도우 프로그래밍의 개념

슬라이드 1

PowerPoint Template

슬라이드 1

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint - additional01.ppt [호환 모드]

Chapter 1

Programming hwp

윈도우즈 프로그래밍

UI TASK & KEY EVENT

금오공대 컴퓨터공학전공 강의자료

chap 5: Trees

게임 기획서 표준양식 연구보고서

슬라이드 1

Microsoft PowerPoint - Chap12-OOP.ppt

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

gnu-lee-oop-kor-lec06-3-chap7

윈도우 프로그래밍의 개념

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

UI TASK & KEY EVENT

4S 1차년도 평가 발표자료

Microsoft PowerPoint - hci2-lecture7.ppt

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

ISP and CodeVisionAVR C Compiler.hwp

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

<4D F736F F F696E74202D203036C0E520BBE7BFEBC0DA20C0CEC5CDC6E4C0CCBDBA205BC8A3C8AF20B8F0B5E55D>

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Slide 1

Convenience Timetable Design

슬라이드 1

강의 개요

Transcription:

7 장. 대화상자 모달대화상자 (modal dialog box) DDX (Dialog Data Exchange) 모델리스대화상자 (modeless dialog box) 공통대화상자의사용 Paint3.dsw 순천향대학교정보기술공학부이상정 1 모달대화상자 (modal dialog box) 순천향대학교정보기술공학부이상정 2

대화상자의종류 모달대화상자 (modal dialog box) 대화상자를닫기전에다른윈도우로전환할수없으며 OK, CANCEL 버튼을눌러야다른윈도우로전환 Open 대화상자, 메시지대화상자 모델리스대화상자 (modeless dialog box) 대화상자를열어놓은채로다른작업을할수있는대화상자 워드프로그램의찾기대화상자 순천향대학교정보기술공학부이상정 3 Modal.dsw 예 (1) 모달형대화상자만들기 현재의화면해상도를조사해결과를대화상자를통해사용자에게보여주기 순천향대학교정보기술공학부이상정 4

Modal.dsw 예 (2) 1. SDI 옵션을사용하여 Modal.dsw 프로젝트생성 2. 리소스뷰의 Dialog을선택후오른쪽버튼을눌러팝업메뉴에서 Insert Dialog 항목을선택 IDD_DIALOG1이라는대화상자가만들어짐 툴바에서원하는컨트롤 ( 에디트박스 2개 ) 을선택후대화상자에배치 에디트박스선택하고오른쪽버튼의메뉴 properties에서 ID를 IDC_EDIT1, IDC_EDIT2로설정 순천향대학교정보기술공학부이상정 5 Modal.dsw 예 (3) 순천향대학교정보기술공학부이상정 6

Modal.dsw 예 (4) 3. 대화상자를만든후 View/ClassWizard 를선택하여대화상자클래스 Cinfo 클래스생성 => Info.h, Info.cpp 파일생성 순천향대학교정보기술공학부이상정 7 Modal.dsw 예 (5) 4. 클래스위저드를사용하여 WM_INITDIALOG 메시지핸들러코드작성 Info.cpp 파일에서대화상자가처음만들어질때수행되는 OnInitDialog() 함수 BOOL CInfo::OnInitDialog() CDialog::OnInitDialog(); int x,y; x=getsystemmetrics(sm_cxscreen); y=getsystemmetrics(sm_cyscreen); SetDlgItemInt(IDC_EDIT1,x); SetDlgItemInt(IDC_EDIT2,y); return TRUE; 순천향대학교정보기술공학부이상정 8

Modal.dsw 예 (6) GetSystemMetrics() 함수는시스템의현재구성상태를알려줌 SM_CXSCREEN : 화면의가로해상도 SM_CYSCREEN : 화면의세로해상도 SetDlgItemInt() 함수는대화상자의컨트롤에값을할당 void SetDlgItemInt(int nid, UNIT nvalue, BOOL bsigned=true); 첫번째인수 : 컨트롤의ID 두번째인수 : 대입할값 GetDlgItemInt() 는컨트롤의값을 read UNIT GetDlgItemInt(int nid, BOOL* lptrans=null, UNIT nvalue, BOOL bsigned=true); 순천향대학교정보기술공학부이상정 9 Modal.dsw 예 (7) 5. 프로그램에서대화상자호출 메뉴에 Modal 메뉴항목 (ID : ID_FILE_MODAL) 첨가 순천향대학교정보기술공학부이상정 10

Modal.dsw 예 (8) COMMAND 메시지핸들러 (CModalView::OnFileModal()) 코드생성 순천향대학교정보기술공학부이상정 11 Modal.dsw 예 (7) void CModalView::OnFileModal() CInfo dlg; dlg.domodal(); // 대화상자를화면에출력 6. CModalView.cpp에 CInfo 클래스정보삽입 #include "Info.h" 순천향대학교정보기술공학부이상정 12

대화상자디자인 컨트롤툴바 툴바보이기 오른쪽버튼을눌러팝업메뉴에서 Controls 체크박스를클릭 배치 컨트롤선택후드래그 속성조정 팝업메뉴에서 Properties 항목에서속성설정 탭순서변경 Layout/Tab Order 메뉴선택 대화상자에있는컨트롤을순서대로선택하면탭순서가변경 대화상자의빈곳을클릭하면탭순서지정마침 테스트 직접실행하지않고테스트만할수있는방법 LayOut/Test 메뉴선택 순천향대학교정보기술공학부이상정 13 DDX (Dialog Data Exchange) 순천향대학교정보기술공학부이상정 14

대화상자와의통신 메인프로그램과대화상자간의정보교환방법 대화상자를호출하는함수 (DoModal) 는인수가없기때문에정보를대화상자로전달할수없음 DoModal 이대화상자를실행후넘겨주는반환값도하나이므로대화상자의정보를메인프로그램에넘겨주기가어려움 화면의 (x,y) 위치에문자열을출력하되좌표값과문자열을대화상자로부터입력받는예제소개 대화상자와프로그램간의정보전달예 기초적인방식 : Ddx1.dsw DDX 방식 : Ddx2.dsw 순천향대학교정보기술공학부이상정 15 Ddx1.dsw 실행예 순천향대학교정보기술공학부이상정 16

Ddx1.dsw 예 (1) 1. Ddx1.dsw 를 SDI 옵션으로생성 2. 새로운대화상자디자인 3 개의에디트컨트롤에대한 ID IDC_NX, IDC_NY, IDC_MYSTR 순천향대학교정보기술공학부이상정 17 Ddx1.dsw 예 (2) 클래스위자드를실행시켜대화상자를사용하는클래스를생성 클래스이름 : CInput base class : CDialog Dialog ID : IDD_DIALOG1 클래스위자드가 Input.h, Input.cpp 파일을프로젝트에첨가 순천향대학교정보기술공학부이상정 18

Ddx1.dsw 예 (3) 3. Cinput 클래스코드수정 에디트컨트롤로입력한값을저장할변수를 Input.h 에선언 class CInput : public CDialog // Construction public: CInput(CWnd* pparent = NULL); // standard constructor int m_nx,m_ny; // 대화상자로부터입력된좌표값을저장 CString m_mystr; // 문지열을저장 순천향대학교정보기술공학부이상정 19 Ddx1.dsw 예 (4) 대화상자가열릴때변수값을대화상자의에디트컨트롤에복사 WM_INITDIALOG 메시지핸들러에서수행 BOOL CInput::OnInitDialog() CDialog::OnInitDialog(); SetDlgItemInt(IDC_NX,m_nx); SetDlgItemInt(IDC_NY,m_ny); SetDlgItemText(IDC_MYSTR,m_MyStr); return TRUE; 순천향대학교정보기술공학부이상정 20

Ddx1.dsw 예 (5) 대화상자가닫힐때컨트롤에입력된값을변수에대입 IDOK 버튼의 BN_CLICKED 메시지핸들러에서수행 void CInput::OnOK() m_nx=getdlgitemint(idc_nx); m_ny=getdlgitemint(idc_ny); GetDlgItemText(IDC_MYSTR,m_MyStr); CDialog::OnOK(); 순천향대학교정보기술공학부이상정 21 Ddx1.dsw 예 (6) 5. 뷰에서위치좌표에문자열을출력 OnDraw() 함수에서문자열을출력 void CDdx1View::OnDraw(CDC* pdc) CDdx1Doc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdc->textout(dlg.m_nx,dlg.m_ny, dlg.m_mystr, dlg.m_mystr.getlength()); dlg 객체를뷰에서사용하도록하기위해뷰클래스해더에서 CInput 클래스객체를선언 #include "input.h" class CDdx1View : public CView. // Attributes public: CDdx1Doc* GetDocument(); CInput dlg; 순천향대학교정보기술공학부이상정 22

Ddx1.dsw 예 (7) 대화상자를호출하는코드작성 파일 /Input 메뉴항목 (ID: ID_FILE_INPUT) 에서 COMMAND 메시지핸들러 void CDdx1View::OnFileInput() dlg.domodal(); Invalidate(); 뷰의생성자함수에서변수초기화 CDdx1View::CDdx1View() dlg.m_nx=0; dlg.m_ny=0; dlg.m_mystr="start String"; 순천향대학교정보기술공학부이상정 23 Ddx2.dsw 예 (1) MFC 는데이터교환의자동화방법 (DDX 메커니즘 ) 을제공 1. SDI 옵션으로 Ddx2.dsw 프로젝트생성 2. 대화상자디자인 3개의에디트컨트롤첨가 : IDC_NX IDC_NY IDC_MYSTR 클래스위자드를실행시켜대화상자를사용하는클래스를생성 클래스이름 : Cinput, base class: Cdialog, Dialog ID: IDD_DIALOG1 3. 클래스위저드를사용하여변수를첨가 변수첨가시값의범위를점검 DDV (Dialog Data Validation) 서비스 순천향대학교정보기술공학부이상정 24

Ddx2.dsw 예 (2) 순천향대학교정보기술공학부이상정 25 Ddx2.dsw 예 (3) 클래스위자드는대화상자클래스선언부에입력한변수를자동추가 class CInput : public CDialog // Construction public: CInput(CWnd* pparent = NULL); // standard constructor // Dialog Data //AFX_DATA(CInput) enum IDD = IDD_DIALOG1 ; CStringm_MyStr; int m_nx; int m_ny; //AFX_DATA 클래스위자드가대화상자의생성자에서변수를초기화시킨다. CInput::CInput(CWnd* pparent /*=NULL*/) : CDialog(CInput::IDD, pparent) //AFX_DATA_INIT(CInput) m_mystr = _T(""); m_nx = 0; m_ny = 0; //AFX_DATA_INIT 순천향대학교정보기술공학부이상정 26

Ddx2.dsw 예 (4) 클래스위저드가데이터교환 (DDX) 과타당성점검 (DDV) 을자동으로수행하는 DoDataExchange 함수를작성 void CInput::DoDataExchange(CDataExchange* pdx) CDialog::DoDataExchange(pDX); //AFX_DATA_MAP(CInput) DDX_Text(pDX, IDC_MYSTR, m_mystr); DDX_Text(pDX, IDC_NX, m_nx); DDV_MinMaxInt(pDX, m_nx, 0, 1000); DDX_Text(pDX, IDC_NY, m_ny); DDV_MinMaxInt(pDX, m_ny, 0, 1000); //AFX_DATA_MAP 순천향대학교정보기술공학부이상정 27 Ddx2.dsw 예 (5) 4. 뷰에서의작업은 Ddx1.dsw와동일 OnDraw() 함수에서문자열을출력 void CDdx1View::OnDraw(CDC* pdc) CDdx1Doc* pdoc = GetDocument(); ASSERT_VALID(pDoc); dlg 객체를뷰에서사용하도록하기위해뷰클래스해더에서 CInput 클래스객체를선언 #include "input.h" class CDdx1View : public CView. // Attributes public: CDdx1Doc* GetDocument(); CInput dlg; pdc-> TextOut(dlg.m_nx, dlg.m_ny, dlg.m_mystr, dlg.m_mystr.getlength()); 순천향대학교정보기술공학부이상정 28

Ddx2.dsw 예 (6) 대화상자를호출하는코드작성 파일 /Input 메뉴항목 (ID: ID_FILE_INPUT) 에서 COMMAND 메시지핸들러 void CDdx1View::OnFileInput() dlg.domodal(); Invalidate(); 뷰의생성자함수에서변수초기화 CDdx1View::CDdx1View() dlg.m_nx=0; dlg.m_ny=0; dlg.m_mystr="start String"; 순천향대학교정보기술공학부이상정 29 모델리스대화상자 (modeless dialog box) 순천향대학교정보기술공학부이상정 30

모델리스대화상자 모델리스대화상자는열어놓은채로사용하기때문에여러가지문제가발생 메뉴항목등의메시지핸들러함수내에서대화상자를만들고, 파괴하는모든일을할수없다. 따라서만드는과정과파괴하는과정을분리 DoModal() 함수대신에 Create() 함수를사용 OK 버튼을누르지않고도변경한값이즉시반영되도록해야함 순천향대학교정보기술공학부이상정 31 Ddx2a 예 (1) Ddx2 디렉토리를모두복사하여 Ddx2a 디렉토리를만들고다음과같이수정 1. 대화상자를만드는 File/Input 메뉴항목의핸들러를수정 void CDdx2View::OnFileInput() if (dlg.getsafehwnd()==null) dlg.create(idd_dialog1); dlg.showwindow(sw_show); DoModal() 함수대신에 Create() 함수사용하여대화상자를생성 GetSafeHwnd() 는해당대화상자가이미만들어져있는지를조사 ShowWindow(SW_SHOW) 는대화상자를화면에나타내어줌. 대화상자의속성윈도우의 More Styles 에서 visible 속성을설정하면위함수와동일한효과 순천향대학교정보기술공학부이상정 32

Ddx2a 예 (2) 2. 대화상자를열어놓고값을계속갱신하도록하기위해 Update 버튼추가 순천향대학교정보기술공학부이상정 33 Ddx2a 예 (3) Update 버튼의 BN_CLICKED 메시지핸들러에서값을갱신 void CInput::OnUpdate() UpdateData(TRUE); m_pview->invalidate(); UpdateData(TRUE) : 대화상자의컨트롤값을대응하는변수에복사 UpdateData(FALSE): TRUE의반대 Class Cinput Cstring m_mystr; int m_nx; Int m_ny; UpdateData(FALSE) UpdateData(TRUE) 순천향대학교정보기술공학부이상정 34

Ddx2a 예 (4) 3. 대화상자에서뷰를호출할수있도록설정 대화상자를호출한뷰를설정 대화상자클래스의해더파일에대화상자를호출한뷰의포인터를저정할변수를선언 class CInput : public CDialog // Construction public: CInput(CWnd* pparent = NULL); // standard constructor CView *m_pview; 뷰의생성자에서이변수에자신의뷰포인터를대입 CDdx2View::CDdx2View() dlg.m_nx=0; dlg.m_ny=0; dlg.m_mystr="start String"; dlg.m_pview=this; 순천향대학교정보기술공학부이상정 35 Ddx2a 예 (5) 4. 대화상자의 OK 버튼을누를때화면갱신 IDOK 의 BN_CLICKED 메시지핸들러 void CInput::OnOK() m_pview->invalidate() CDialog::OnOK(); 순천향대학교정보기술공학부이상정 36

Ddx2a 실행예 순천향대학교정보기술공학부이상정 37 공통대화상자의사용 순천향대학교정보기술공학부이상정 38

공통대화상자 Common Dialog는모든윈도우즈용프로그램에서공통으로사용하는대화상자 MFC에서는공통대화상자는 CCommonDialog 클래스로부터파생 대화상자파일열기대화상자폰트선택대화상자색상선택대화상자페이지셋업대화상자인쇄대화상자찾기, 바꾸기대화상자 클래스명 CFileDialog CFontDialog CColorDialog CPageSetupDialog CPrintDialog CFindReplaceDialog 순천향대학교정보기술공학부이상정 39 파일열기대화상자 (1) 파일열기대화상자는대화상자로부터파일이름을입력받는데사용 CFileDialog 클래스를사용 CFileDialog 클래스의생성자를사용하여대화상자객체를생성 CFileDialog( BOOL bopenfiledialog, LPCTSTR lpszdefext = NULL, LPCTSTR lpszfilename = NULL, DWORD dwflags = OFN_HIDEREADONLY OFN_OVERWRITEPROMPT, LPCTSTR lpszfilter = NULL, CWnd* pparentwnd = NULL ); bopenfiledialog: 이값이 TRUE이면대화상자는파일열기대화상자가되고, FALSE이면파일저장하기대화상자가된다. lpszdefext: 사용자가에디트박스에서직접파일이름을입력하고파일확장자를생략했을경우사용되는디폴트확장자이다. 확장자가생략된경우이인수가지정하는확장자가파일이름뒤에지동으로추가된다. 이값이 NULL 일경우확장자는추가되지않는다. 순천향대학교정보기술공학부이상정 40

파일열기대화상자 (2) lpszfilename: 파일이름에디트박스에나타날파일이름을지정하되이값이 NULL이면에디트박스에아무파일도지정되지않은채로대화상자가열린다. dwflags: 대화상자의여러가지옵션을설정한다. 이옵션은 CFileDialog 클래스의 m_ofn 멤버변수와동일하다. lpszfilter: 필터를지정하는문자열 pparentwnd: 파일열기대화상자의부모또는오너윈도우의핸들 순천향대학교정보기술공학부이상정 41 파일열기대화상자 (3) 예 CFileDialog dlg(true, _T("AVI"), _T("*.AVI"), OFN_HIDEREADONLY OFN_OVERWRITEPROMPT, _T("Animate(*.AVI) *.AVI")); TRUE는 open일경우, FALSE는 save일경우 _T("AVI") 는 default 파일확장자 _T("*.AVI") 는파일이름란에들어갈파일명 OFN_HIDEREADONLY OFN_OVERWRITEPROMPT는파일을열때설정해주는스타일플러그 OFN_HIDEREADONLY : read only check box를숨김 OFN_OVERWRITEPROMPT : 선택된파일이있다면 save as dialog box를생성 _T("Animate(*.AVI) *.AVI") 는파일형식란에기록할 data 형식, 확장자가AVI인파일만file list box에도시 순천향대학교정보기술공학부이상정 42

Commdlg.dsw 예 (1) 메뉴항목을사용하여공통대화상자를호출하고색상과폰트에대한정보를입력받아사용하는예 1. SDI 옵션을주어 Commdlg.dsw를생성 2. 대화상자를호출하는메뉴항목 Dialog 메뉴에 6 개의공통대화상자를위한메뉴항목설정 ID_DLG_FILE, ID_DLG_FONT, ID_DLG_COLOR, ID_DLG_PAGE, ID_DLG_PRINT, ID_DLG_FIND 순천향대학교정보기술공학부이상정 43 Commdlg.dsw 예 (2) 3. 색상과폰트를저장할변수를뷰의헤더에선언 class CCommdlgView : public CView protected: // create from serialization only CCommdlgView(); DECLARE_DYNCREATE(CCommdlgView) // Attributes public: CCommdlgDoc* GetDocument(); COLORREF m_brcolor;// 색상을저장할변수 LOGFONT m_font;// 폰트를저장할변수 순천향대학교정보기술공학부이상정 44

Commdlg.dsw 예 (3) 4. 각메뉴항목에대해 COMMAND 메시지핸들러작성 void CCommdlgView::OnDlgColor() CColorDialog dlg; dlg.domodal(); m_brcolor=dlg.getcolor(); Invalidate(); void CCommdlgView::OnDlgFile() int Result; CFileDialog dlg(true); Result=dlg.DoModal(); CString IMSI=dlg.GetFileName()+" 를선택하셨네요 "; if (Result==IDOK) MessageBox(IMSI); 순천향대학교정보기술공학부이상정 45 Commdlg.dsw 예 (4) void CCommdlgView::OnDlgFind() CFindReplaceDialog dlg; dlg.create(false,"dog"); // 첫번째인수 (TRUE: 표준 Find dialog, FALSE :Find/Replace dialog), // 두번째인수는 search string, 세번째인수는 replace 될 string MessageBox(" 대화상자떳지요. 좀있다사라집니다 "); void CCommdlgView::OnDlgFont() CFontDialog dlg(&m_font); dlg.domodal(); dlg.getcurrentfont(&m_font); Invalidate(); 순천향대학교정보기술공학부이상정 46

Commdlg.dsw 예 (5) void CCommdlgView::OnDlgPage() CPageSetupDialog dlg; dlg.domodal(); void CCommdlgView::OnDlgPrint() CPrintDialog dlg(false); dlg.domodal(); 순천향대학교정보기술공학부이상정 47 Commdlg.dsw 예 (6) 5. 공통대화상자에서선택한옵션을테스트하기위해 OnDraw 에코드작성 void CCommdlgView::OnDraw(CDC* pdc) CCommdlgDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); CString str(" 문자열이다 ABCD"); CBrush MyBrush, *poldbrush; CFont MyFont,*pOldFont; MyBrush.CreateSolidBrush(m_B rcolor); poldbrush= pdc->selectobject(&mybrush); pdc->ellipse(10,10,200,100); MyFont.CreateFontIndirect(&m_ Font); poldfont=pdc- >SelectObject(&MyFont); pdc- >TextOut(200,150,str,str.GetLen gth()); pdc->selectobject(poldfont); pdc- >SelectObject(pOldBrush); 순천향대학교정보기술공학부이상정 48

Commdlg.dsw 예 (7) 6. OnCreate(WM_CREATE 메시지 ) 에서폰트 ( 디폴트폰트 ), 색상 ( 검정 ) 을초기화 int CCommdlgView::OnCreate(LPCREATESTRUCT lpcreatestruct) if (CView::OnCreate(lpCreateStruct) == -1) return -1; CClientDC dc(this); CFont *TempFont=dc.GetCurrentFont(); TempFont->GetLogFont(&m_Font); m_brcolor=rgb(0,0,0); return 0; 순천향대학교정보기술공학부이상정 49 Commdlg.dsw 실행예 순천향대학교정보기술공학부이상정 50

Paint3.dsw 순천향대학교정보기술공학부이상정 51 Paint3.dsw 예 (1) Paint2.dsw 예제를변형 선의색상과굵기를대화상자를통해입력 선의색상을공통대화상자로입력 1. Paint3 디렉토리를만든다음 Paint2.dsw를복사 2. 선의속성을입력받는대화상자디자인 IDC_PenWidth, IDC_R, IDC_G, IDC_B 순천향대학교정보기술공학부이상정 52

Paint3.dsw 예 (2) 클래스위저드를사용하여대화상자의클래스를프로젝트에첨가 클래스이름 : CLineAttr DDX를위해각컨트롤에대응하는멤버변수추가 굵기유효범위 : 1-10 색상은유효범위가자동으로상한값이 255로설정 순천향대학교정보기술공학부이상정 53 Paint3.dsw 예 (3) 3. 클래스위저드에의해멤버변수가자동으로추가되고, 초기값도자동설정 class CLineAttr : public CDialog // Construction public: CLineAttr(CWnd* pparent = NULL); // standard constructor // Dialog Data //AFX_DATA(CLineAttr) enum IDD = IDD_DIALOG1 ; BYTE m_b; BYTE m_g; int m_penwidth; BYTE m_r; //AFX_DATA CLineAttr::CLineAttr(CWnd* pparent /*=NULL*/) : CDialog(CLineAttr::IDD, pparent) //AFX_DATA_INIT(CLineAttr) m_b = 0; m_g = 0; m_penwidth = 0; m_r = 0; //AFX_DATA_INIT 순천향대학교정보기술공학부이상정 54

Paint3.dsw 예 (4) 4. 뷰에서대화상자를호출하도록 Paint 메뉴의끝에 Line Attr 메뉴항목추가 순천향대학교정보기술공학부이상정 55 Paint3.dsw 예 (5) 5. 대화상자객체 (dlg) 를뷰의멤버변수로선언 #include "LineAttr.h" enum tagtool DRAW,LINE,ELLIPSE,RECTANGLE; class CPaint2View : public CView // Attributes public: CPaint2Doc* GetDocument(); CPoint m_nowp;// 마우스가처음눌려진좌표기억 CPoint m_oldp;// 선, 원, 사각형을그릴시중간과정의좌표를기억 tagtool m_tool;// 그리기종류를기억 BOOL m_bpaint;// 그림을그리는중인지를기억 CLineAttr dlg; 순천향대학교정보기술공학부이상정 56

Paint3.dsw 예 (6) 6. Line Attr 메뉴항목의 COMMAND 메시지핸들러에서대화상자를호출 void CPaint2View::OnPaintLineattr() dlg.domodal(); 7. 대화상자를통해선택된색상과펜굵기를그리기코드에적용 마우스버튼을놓을때 void CPaint2View::OnLButtonUp(UINT nflags, CPoint point) m_bpaint=false; CBrush *OldBrush; CPen *OldPen, MyPen; CClientDC dc(this); OldBrush=(CBrush *) dc.selectstockobject(null_brush); 순천향대학교정보기술공학부이상정 57 MyPen.CreatePen(0,dlg.m_PenWidth,R GB(dlg.m_R,dlg.m_G,dlg.m_B)); OldPen=dc.SelectObject(&MyPen); switch (m_tool) case LINE: dc.moveto(m_nowp); dc.lineto(point); break; case ELLIPSE: dc.ellipse(m_nowp.x,m_nowp.y,point.x,point.y); break; case RECTANGLE: dc.rectangle(m_nowp.x,m_nowp.y,poi nt.x,point.y); break; dc.selectobject(oldbrush); dc.selectobject(oldpen); Paint3.dsw 예 (7) 마우스버튼을움직일때 void CPaint2View::OnMouseMove(UINT nflags, CPoint point) CBrush *OldBrush; CPen *OldPen, MyPen; CClientDC dc(this); OldBrush=(CBrush *)dc.selectstockobject(null_brush); MyPen.CreatePen(0,dlg.m_PenWidth,RG B(dlg.m_R,dlg.m_G,dlg.m_B)); OldPen=dc.SelectObject(&MyPen); if (!m_bpaint) return; switch (m_tool) case DRAW: dc.moveto(m_nowp); dc.lineto(point); m_nowp=point; break; 순천향대학교정보기술공학부이상정 58 case LINE: dc.setrop2(r2_not);// 한번그린후다시그리면원래의그림을복구 dc.moveto(m_nowp); dc.lineto(m_oldp); dc.moveto(m_nowp); dc.lineto(point); m_oldp=point; break; case RECTANGLE: dc.setrop2(r2_not); dc.rectangle(m_nowp.x,m_nowp.y,m_ol dp.x,m_oldp.y); dc.rectangle(m_nowp.x,m_nowp.y,point.x,point.y); m_oldp=point; break; dc.selectobject(oldbrush); dc.selectobject(oldpen);

Paint3.dsw 예 (8) 8. 색상을색상선택공통대화상자를사용 - 대화상자에색상선택공통대화상자를호출하는버튼을추가 순천향대학교정보기술공학부이상정 59 Paint3.dsw 예 (9) CLineAttr 클래스에서 IDC_BUTTON 의 BN_CLICKED 메시지핸들러를작성 void CLineAttr::OnButton1() CColorDialog COL; COLORREF SelColor; if (COL.DoModal()==IDOK) SelColor=COL.GetColor(); m_r=getrvalue(selcolor); m_g=getgvalue(selcolor); m_b=getbvalue(selcolor); UpdateData(FALSE); 순천향대학교정보기술공학부이상정 60

Paint3.dsw 예 (10) 9. 커서모양바꾸기 Resource View 의팝업메뉴에서 insert -> cursor 를선택하여새로운커서를설계 순천향대학교정보기술공학부이상정 61 Paint3.dsw 예 (11) 10. 커서모양을마우스왼쪽버튼을 down IDC_CURSOR1 으로바꾸고, up 시 IDC_ARROW 로바꾸기 OnLButtonDown() 에다음코드삽입 HCURSOR MyCursor = AfxGetApp()->LoadCursor(IDC_CURSOR1); SetClassLong(m_hWnd, GCL_HCURSOR, (long)mycursor); OnLButtonUp() 에다음코드삽입 HCURSOR MyCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW); SetClassLong(m_hWnd, GCL_HCURSOR, (long)mycursor); 순천향대학교정보기술공학부이상정 62

Paint3.dsw 실행예 순천향대학교정보기술공학부이상정 63 과제 7 장에서학습한대화상자를응용한프로그램작성 순천향대학교정보기술공학부이상정 64