Download presentation
Published byJeffrey Marcus Greene Modified over 9 years ago
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()
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.