1 / 17

대화상자 (Dialog Box)

대화상자 (Dialog Box). 오른쪽 Button 을 누르면 다음과 같은 대화상자가 나타나는 프로그램 CDialog class 의 사용 Dialog Box 의 Design CDialog 파생 class 의 정의. Dialog Box. Dialog Box 의 Design. Class View, Resource View, File View 중에서 Resource View 를 선택. 오른쪽 마우스 버튼을 click 하여 , Insert Dialog 선택. Dialog Box 의 Design.

hayden
Download Presentation

대화상자 (Dialog Box)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 대화상자 (Dialog Box) • 오른쪽 Button을 누르면 다음과 같은 대화상자가 나타나는 프로그램 • CDialog class 의 사용 • Dialog Box의 Design • CDialog 파생 class의 정의 Dialog Box

  2. Dialog Box의 Design • Class View, Resource View, File View 중에서 Resource View를 선택 오른쪽 마우스 버튼을 click 하여, Insert Dialog 선택

  3. Dialog Box의 Design • Control 메뉴를 사용하여 Dialog Box에 control을 배치 • OK, Cancel Button은 이미 존재함. 위치만 바꾸면 됨 control 메뉴 EditBox control 만약에 control 메뉴가 보이지 않으면, Visual C++ 메뉴위에서 오른쪽 마우스 버튼을 눌러, controls를 선택하면 됨

  4. Dialog Box의 Design • Dialog 위에서 오른쪽 마우스 click 하여 Properties를 선택 • ID를 IDD_MOVE로 바꿈 (마음대로 선택해도 됨) • DialogBox의 외형적인 Design이 모두 끝났음 • 방금 design한 외형의 ID : IDD_MOVE

  5. CDialog 파생 class의 생성 • CDialog 파생 class의 생성 • 메뉴에서 : Insert  New Class를 선택 Dialog Box 파생 class 이름 (마음대로 지어도 됨) (CxxxDlg) Base class (CDialog) Dialog Box 와 관련된 Design

  6. Dialog Box Design + CDialog 관련 class • Dialog Box의 실제 기능은 CMoveDlg (CDialog의 파생 class)에서 하게 됨 CMoveDlg class IDD_MOVE 라는 ID를 가지는 Dialog Box를 design 했음. 기능은 아무것도 없음 Dialog Box와 관련된 일들은 class의 멤버함수가 담당함. 예: Dialog Box를 나타나게 함, OK button을 눌렀을 때 처리

  7. CDialog 파생 class의 생성 • What happened? • CMoveDlg class가 만들어졌음 (Class View) • 생성된 파일 • MoveDlg.cpp (CMoveDlg class 멤버 함수) • MoveDlg.h (CMoveDlg class 정의) • CMoveDlg를 사용할 때, MoveDlg.h를 include 시킬 것

  8. 오른쪽 마우스 click할 때 Dialog Box가 나타나게 할려면? • CxxxView class • CDialog의 멤버 함수 DoModal() : Dialog Box를 화면에 표시함 • 왼쪽 마우스 click 할 때에도 Dialog Box를 표시할려면 어떻게 해야 되는가? #include "MoveDlg.h" void CLectue113View::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CMoveDlg dlg; dlg.DoModal(); CView::OnRButtonDown(nFlags, point); } Dialog Box 화면 표시

  9. 왼쪽, 오른쪽 마우스 click할 때 Dialog Box가 나타나게 할려면? #include "MoveDlg.h" void CLectue113View::OnRButtonDown(UINT nFlags, CPoint point) { CMoveDlg dlg; dlg.DoModal(); } void CLectue113View::OnLButtonDown(UINT nFlags, CPoint point) { CMoveDlg dlg; dlg.DoModal(); }

  10. 예제 : Dialog Box 생성 • 실습문제 : 왼쪽 마우스를 click하면 왼쪽 DialogBox를, 오른쪽 마우스를 click하면 오른쪽 Dialog Box를 나타나게 하는 프로그램을 작성하라. • 예제에서는 CMoveDlg class를 만들었음 • 이번에는 CLeftDlg 및 CRightDlg를 만들 것

  11. Dialog Box 동작 • OK, Cancel Button을 누르면 어떤 일이 벌어지는가? • OK Button 누름  CDialog의 OnOK 멤버함수가 call 됨  DoModal() 함수에 IDOK를 return 함 • Cancel Button 누름  CDialog의 OnCancel 멤버함수가 call 됨  DoModal() 함수에 IDCANCEL을 return 함

  12. Dialog Box 예제 : OK, Cancel Button • 왼쪽 마우스 click 하면 Dialog Box 나타남 • OK Button click  화면에 OK 표시 • Cancel Button click  화면에 Cancel 표시 void CLecture112View::OnLButtonDown(UINT nFlags, CPoint point) { CLeftDlg dlg; CClientDC dc(this); if ( dlg.DoModal() == IDOK ) dc.TextOut(point.x, point.y, "OK Button Pressed"); else dc.TextOut(point.x, point.y, "Cancel Button Pressed"); }

  13. Dialog Box의 Value형 멤버변수 사용 • CDialog Class • 멤버함수 : DoModal(), OnInitDialog() (WM_INITDIALOG의 message handler) • Dialog 관련 초기화는 OnInitDialog()에서 할 수 있음 • 멤버변수 : control과 관련하여 정의할 수 있음 • Control과 멤버변수를 자동으로 연결해 주는 기능이 있음 • Control에 사용자가 입력한 값이 변수로 전달됨 • 변수에 입력한 값이 Control에 전달됨 CDialog class 멤버변수 m_a

  14. Dialog Box의 Control과 멤버변수 연계 • Resource View control-key를 누른채, double click을 함 변수 이름 m_xxx형태 변수 type 지정

  15. Dialog Box의 Control과 멤버변수 연계 • CRightDlg class에 m_a 멤버변수가 추가됨을 알 수 있다. class CRightDlg : public CDialog { // Construction public: CRightDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CRightDlg) enum { IDD = IDD_RIGHT }; int m_a; //}}AFX_DATA

  16. 멤버변수  control로 데이터 전송 • 멤버변수의 값이 control에 표시됨 void CLecture112View::OnRButtonDown(UINT nFlags, CPoint point) { CRightDlg dlg; dlg.m_a = 100; dlg.DoModal(); } dialog box가 나타날 때, 100이란 값이 표시됨

  17. control  멤버변수로 데이터 전송 • 입력된 숫자 크기의 사각형을 그림 (s 및 rect_size는 전역변수로 정의해야 됨) void CLecture112View::OnDraw(CDC* pDC) { CLecture112Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->Rectangle(s.x,s.y,s.x+rect_size,s.y+rect_size); } void CLecture112View::OnRButtonDown(UINT nFlags, CPoint point) { CRightDlg dlg; dlg.m_a = 100; if ( dlg.DoModal() == IDOK ) { s = point; rect_size = dlg.m_a; // control에 입력한 값 Invalidate(); } }

More Related