Title: Dialog Boxes and Property Sheets
1Dialog Boxes andProperty Sheets
- Jim Fawcett
- CSE791 Advanced Windows Programming
- Summer 2002
2References
- Programming Windows with MFC, Jeff Prosise, 2nd
Edition, Microsoft Press, 1999 - Derived from presentations by Kevin Devaney and
Ciahua Wang, 2001
3Dialog Boxes
- Modal
- Owner window disabled until dialog closed
- Modeless
- Owner window can be reactivated while dialog is
still open - Property Sheets
- Dialog boxes with tabbed pages
4Class Hierarchy
5Example Dialog Box
- Font dialog
- Controls
- Combo boxes
- List boxes
- Check boxes
- Push buttons
6Create a Simple Dialog App
- Use MFC AppWizard
- Visual C Menu
- File / New / MFC AppWizard
- Step 0 - Define project name and location
- Step 1 Choose Dialog-based
- Other Steps Accept defaults
7Using MFC AppWizard
8Add Dialog Controls
- Use toolbar to select controls for your dialog
- Click on the control you want
- Click on the dialog where you want to put the
control - Drag mouse on edges of the control to resize it
- Right-click on control, select properties and
provide new ID
9Dialog Resource File (.rc)
- IDD_CREDIT_DIALOG DIALOGEX 0, 0, 265, 154
- STYLE DS_MODALFRAME WS_MINIMIZEBOX WS_POPUP
WS_VISIBLE WS_CAPTION WS_SYSMENU - EXSTYLE WS_EX_APPWINDOW
- CAPTION "Credit Card Calculator"
- FONT 8, "MS Sans Serif"
- BEGIN
- DEFPUSHBUTTON "Calculate",IDOK,198,102,41,14
- PUSHBUTTON "Exit",IDCANCEL,198,126,41,14
- CONTROL "Spin1",IDC_SPIN_DEBT,"msctls_
updown32",UDS_ARROWKEYS,21,22,11,14 - END
Resource file has dialog template Dialog box
characteristics (popup) Types of controls used
in the dialog (spin) Control position, size,
characteristics
10Adding Shortcut Keys
Right-click on control and select Properties
Exit
Alt-E will activate the Exit button
11Setting Tab Order
In Visual C menu, choose Layout/Tab Order
Current tab order will be shown
Click on controls in desired order to set a new
tab order
12Responding to User Input
- Double-click on the control
- Add Member Function dialog will pop up
- Select OK and it will create a function for
that control - OnOK for OK button
- OnChangeEditXxxx for edit control
- Add code to the function to perform needed
processing
13Temperature Converter
IDC_EDIT_INPUT
IDC_EDIT_OUTPUT
14OnOK Processing
15How to talk to controls - 1
- Use CWnd functions
- GetDlgItemText, SetDlgItemText
- CheckRadioButton, GetCheckedRadioButton
- CheckDlgButton, IsDlgButtonChecked
- This was illustrated in Temperature Converter
example
16How to talk to controls - 2
- Use info supplied in the message handler
17How to talk to controls - 3
- Use common control classes
- CEdit, CListBox, CComboBox, CSliderCtrl, etc
- Use CWnd Attach function to associate control
class with your control
18Common Control Class Example
Remember to use Detach function if you create
the object on the stack
19How to talk to controls - 4
- Use Dynamic Data Exchange
- Override virtual function DoDataExchange
- Use DDX functions to associate member variables
with controls - Exchange occurs
- Input (variable to control) in OnInitDialog
- Output (control to variable) in OnOK
20DDX Example
21DDX Functions
- DDX_Text Edit control
- DDX_Check Check box
- DDX_Radio Radio box
- DDX_LBIndex, DDX_LBString List box
- DDX_CBIndex, DDX_CBString Combo box
- DDX_Scroll Scroll bar
22Dynamic Data Validation
- Dynamic data validation (DDV) works similar to
DDX - DDV checks that input data is within specified
limits - If data is outside limits, focus is passed to the
control and an error message is displayed
23DDV Example
24DDV Functions
- DDV_MinMaxByte, DDV_MinMaxInt,
- DDV_MinMaxLong, DDV_MinMaxUInt,
- DDV_MinMaxDWord, DDV_MinMaxFloat,
- DDV_MinMaxDouble, DDV_MaxChars
25Modal vs Modeless
- Modal
- Display dialog by calling CDialogDoModal
- Exit by calling CDialogOnOK or OnCancel
- Usually instantiated on the stack so destruction
is automatic
26Modal vs Modeless
- Modeless
- Display dialog by calling CDialogCreate
- Exit dialog by calling DestroyWindow
- Dont call OnOK or OnCancel
- Usually instantiated on the heap (new) so the
dialog is not destroyed prematurely - Make sure dialog is deleted by overriding
CDialogPostNcDestroy function using delete
this statement
27Basic Modal Dialog Programming (see example p.
398)
- Declare dialog member variables in header file
(.h) - Initialize variables and setup controls in
OnInitDialog - Use Class Wizard to create message handler
functions that get user input - Perform data processing in OnOK andcomment out
call to CdialogOnOK()
28Property Sheets
- Tabbed dialog boxes
- User can switch between pages using mouse
- MFC classes
- CPropertySheet
- CPropertyPage
29Property Sheets
- Is a tabbed dialog box containing pages of
controls that user can switch among. - Encapsulated in a pair of MFC classes
CPropertySheet and CPropertyPage - CPropertySheet represents the property sheet
itself - CPropertyPage represents a page in the property
sheet. - Property sheets can be modal or modeless, created
with DoMomal() or Create()
30How to Create a Modal Property Sheet
- For each page create a dialog template.
- For each page derive a dialog-like class from
CPropertyPage that include public members linked
to the pages controls via DDX or DDV. - Derive a property sheet class from
CPropertySheet. - Use CPropertySheetAddPage() to add pages to the
property sheet. - Call the property sheets DoModal() to display
the property sheet.
31How to Create a Modal Property Sheet (cont.)
- MFC CPropertySheet provide functions for three
buttons -- OK, Cancel and Apply. - Property sheet pages should not include OK or
Cancel button --when the property sheets OK
buton is clicked, the current pages OnOK() is
called. - Add message handler for Apply button, which
should call the active pages UpdateData(TRUE). - Use CPropertyPages SetModified() to enable or
disable Apply button.
32How to Create a Modal Property Sheet (cont.)
- class CFirstPagepublic CPropertyPage
- public .
- // delare member here
- ptotected
- virtual void DoDataExchange(CDataExchange)
. -
- class CMyPropertySheetpublic CProperySheet
- CFirstPage m_firstPage // first
page .. - public .
- CMyPropertySheet() // constructor
- AddPage(m_firstPage) .
33Common Dialogs
- CFileDialog
- CPrintDialog
- CPageSetupDialog
- CFindReplaceDialog
- CColorDialog
- CFontDialog
34CFileDialog
35CFileDialog code
TCHAR szFilters _T("Text files
(.txt).txtAll files (.).") CFileDialog
dlg(TRUE, _T("txt"), _T(".txt"),
OFN_FILEMUSTEXIST OFN_HIDEREADONLY,
szFilters) if( dlg.DoModal() IDOK )
filename dlg.GetPathName()