Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 8 Dialog Boxes and Property Sheet

Similar presentations


Presentation on theme: "Chapter 8 Dialog Boxes and Property Sheet"— Presentation transcript:

1 Chapter 8 Dialog Boxes and Property Sheet

2 Two kinds of dialog boxes
Modal dialog When appear, it takes all ownership of input. It disables the window until the dialog box is dismissed. Modeless dialog It behaves more like a conventional window. It activates together with other windows.

3 Modal Dialog box MFC Class Heirarchy

4 Modal dialog box How to create and show it
① Design a dialog box template  Resource View ② Create a CDialog derived class using the template  Use [Project] [add class] menu ③ Call CDialog::DoModal() function to show the dialog box

5 Modal dialog box Main Virtual functions of CDialog class
WM_INITDIALOG message handler When initializes the dialog box Good place for initializing other controls IDOK message handler (when pressing OK button) Good place for updating variables before closing the dialog box, virtual BOOL CDialog::OnInitDialog ( ); virtual void CDialog::OnOK ( );

6 Modal dialog box Main Virtual functions of CDialog class
IDCANCEL message handler (when pressing cancel button) Close the dialog box virtual void CDialog::OnCancel ( );

7 DDX/DDV What you have to: IDC_STR IDC_COLOR ① ② Dialog box m_str
m_color Dialog variables Parent variables When showing dialog box When pressing OK button

8 DDX/DDV An automatic way: DDX(Dialog Data eXchange) IDC_STR IDC_COLOR
Dialog box m_str m_color Dialog variables Parent variables Automation?

9 DDX/DDV Implementation of DDX Connecting a variable with a control
Use DDX_* MACRO void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDialog) DDX_Text(pDX, IDC_STR, m_str); DDX_Text(pDX, IDC_COLOR, m_color); //}}AFX_DATA_MAP }

10 DDX/DDV OnInitDialog(), OnOK() implementation
BOOL CDialog::OnInitDialog() { ... UpdateData(FALSE); // Give the values to the controls } void CDialog::OnOK() UpdateData(TRUE); // Retrieve the values // from the controls

11 DDX/DDV DDV(Dialog Data Validation)
Automation of the validation of the data Check the range of the data Use DDV_* MACRO void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDialog) DDX_Text(pDX, IDC_STR, m_str); DDV_MaxChars(pDX, m_str, 10); DDX_Text(pDX, IDC_COLOR, m_color); DDV_MinMaxInt(pDX, m_color, 0, 255); //}}AFX_DATA_MAP }

12 Coding Practice Create a dialog box as shown below and show it when pressing mouse left button Type on the edit control and choose a text color value from the radio buttons

13 Two types of dialog boxes
Modal dialog When appear, it takes all ownership of input. It disables the window until the dialog box is dismissed. Modaless dialog It behaves more like a conventional window. It activates together with other windows.

14 Modaless Dialog Box Same thing: Different thing:
Create a dialog template and add a CDialog-derived class. Different thing: Do not use CDialog::DoModal() function Use CDialog::Create() function for initialization Ex: CDialog::Create( Resource_ID, parent_wnd); Use CDialog::ShowWindow() function for showing Use CWnd::DestroyWindow() function to close

15 Modaless dialog box test
Create a dialog box as shown below and show it as a modaless dialog box. Type on the edit control and choose a text color value from the radio buttons

16 Common Dialog Boxes

17 Common Dialog Box MFC Class Hierarchy

18 Common Dialog Dlasses Class Dialog Type(s) CFileDialog
Open and Save As dialog boxes CPrintDialog Print and Print Setup dialog boxes CPageSetupDialog Page Setup dialog boxes CFindReplaceDialog Find and Replace dialog boxes CColorDialog Color dialog boxes CFontDialog Font dialog boxes

19 CColorDialog CColorDialog dlg; dlg.DoModal();
COLORREF color = dlg.GetColor(); CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN); dlg.DoModal(); COLORREF color = dlg.GetColor();

20 CFileDialog CFileDialog dlg(TRUE); if(dlg.DoModal() == IDOK)
MessageBox(dlg.GetPathName()); CFileDialog dlg(FALSE); if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName());

21 CFontDialog CFontDialog dlg; if(dlg.DoModal() == IDOK){
CClientDC dc(this); // Get Color COLORREF color = dlg.GetColor(); dc.SetTextColor(color); // Get Font LOGFONT lf; dlg.GetCurrentFont(&lf); CFont font; font.CreateFontIndirect(&lf); dc.SelectObject(&font); // Show Text dc.TextOut(10, 10, CString("한글 & English")); }

22 CPageSetupDialog CPageSetupDialog dlg; dlg.DoModal();

23 CPrintDialog CPrintDialog dlg(TRUE); dlg.DoModal();
CPrintDialog dlg(FALSE); dlg.DoModal();

24 Part II Document/View Architecture

25 Chapter 9 Documents, Views, and the Single Document Interface

26 Document/View Fundamentals
Single document/view architecture

27 Document/View Fundamentals
Application object: Provides message loop and send messages to the frame window and the view Frame Window object: Shows menu, toolbar and status bar View object: Displays(renders) data Translates mouse and keyboard input into commands to operates the data Document object: Stores data Manipulates data

28 SDI and MDI Single Document Interface vs. Multiple Document Interface
Different in the number of documents to open at once

29 Document Template Document Template MFC Class Hierarchy
Identifies the document class, view class and frame window class. Stores the resource ID for menu, tool bar and other resources for the frame window MFC Class Hierarchy SDI MDI

30 Document Template Initial Setting for an application: InitInstance()
BOOL CExFileApp::InitInstance() { ... CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CExFileDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CExFileView)); AddDocTemplate(pDocTemplate); }

31 Single Document Interface Example (1/4)
New Project: Single Document + Document/View Support

32 Single Document Interface Example (2/4)
Change OnDraw function of View Class void CExFileView::OnDraw(CDC* pDC) { CExFileDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->SetMapMode(MM_LOMETRIC); pDC->Ellipse(100, -100, 600, -600); }

33 Single Document Interface Example (3/4)
Result

34 Single Document Interface Example (4/4)
실행 결과 (cont'd)

35 SDI Application A Simple Structure CWinApp CFrameWnd
CSingleDocTemplate CDocument CView

36 SDI Application A structure with two views CWinApp CSingleDocTemplate
CDocument CView 1 CFrameWnd CView 2

37 GetFirstViewPosition GetFirstDocTemplatePosition
SDI Application How to refer each other Document Object View Frame Window GetFirstViewPosition & GetNextView GetDocument GetActiveDocument GetActiveView Application AfxGetMainWnd AfxGetApp m_pMainWnd GetParentFrame Document Template GetFirstDocTemplatePosition & GetNextDocTemplate GetDocTemplate GetFirstDocPosition & GetNextDoc

38 SDI Application Key Functions CWinApp* AfxGetApp ( );
Return the pointer to the application object CWnd* AfxGetMainWnd ( ); Return the pointer to the frame window object CView* CFrameWnd::GetActiveView ( ); Return the pointer to the view object CDocument* CView::GetDocument ( ); Return the pointer to the document object POSITION CDocument::GetFirstViewPosition ( ); CView* CDocument::GetNextView (POSITION& rPosition); Access to the view object(s) Document Object m_viewList View #1 View #2 View #3 NULL

39 Document/View in detail
Create a new application as a SDI Edit the document template string

40 Document/View in detail
Document template string ExSDI\n\nExSDI\nExSDI 파일 (*.sdi)\n.sdi\nExSDI.Document ① ② ③ ④ ⑤ ⑥ \nExSDI Document No. Description 1 Title shown on the title bar 2 A initial name of the document. If skipped, “untitled” will be given 3 Brief name of the document 4 Brief name of the document in file dialog box 5 Default extension name 6 Document ID used in the windows registry 7 Document name used in the windows registry

41 Document Class Key CDocument operations Function Description
GetFirstViewPosition Returns a POSITION value that can be passed to GetNextView to begin enumerating the views associated with this document GetNextView Returns a CView pointer to the next view in the list of views associated with this document GetPathName Retrieves the document's file name and path—for example, "C:\Documents\Personal\MyFile.doc"; returns an empty string if the document hasn't been named GetTitle Retrieves the document's title—for example, "MyFile"; returns an empty string if the document hasn't been named IsModified Returns a nonzero value if the document contains unsaved data or 0 if it doesn't SetModifiedFlag Sets or clears the document's modified flag, which indicates whether the document contains unsaved data UpdateAllViews Updates all views associated with the document by calling each view's OnUpdate function

42 Document Class Key CDocument Overrides Function Description
OnNewDocument Called by the framework when a new document is created. Override to apply specific initializations to the document object each time a new document is created. OnOpenDocument Called by the framework when a document is loaded from disk. Override to apply specific initializations to the document object each time a document is loaded. DeleteContents Called by the framework to delete the document's contents. Override to free memory and other resources allocated to the document before it is closed. Serialize Called by the framework to serialize the document to or from disk. Override to provide document-specific serialization code so that documents can be loaded and saved.

43 Document class What happens when: [FILE]->[New]
[FILE]->[Open...] [FILE]->[Save] or [File]->[Save as...] DeleteContents()  OnNewDocument() DeleteContents()  Serialize()  OnOpenDocument() Serialize()

44 View Class Key CView Overrides Function Description OnDraw
Called to draw the document's data. Override to paint views of a document. OnInitialUpdate Called when a view is first attached to a document. Override to initialize the view object each time a document is created or loaded. OnUpdate Called when the document's data has changed and the view needs to be updated. Override to implement "smart" update behavior that redraws only the part of the view that needs redrawing rather than the entire view.

45 Coding practice Using Document/View architecture, make an application which draws circles and save/load it Things to change CView:: OnDraw() CDocument:: OnNewDocument() Serialize()


Download ppt "Chapter 8 Dialog Boxes and Property Sheet"

Similar presentations


Ads by Google