350 likes | 781 Views
References. Programming Windows with MFC, Jeff Prosise, 2nd Edition, Microsoft Press, 1999 Derived from presentations by Kevin Devaney and Ciahua Wang, 2001. Dialog Boxes. ModalOwner window disabled until dialog closed ModelessOwner window can be reactivated while dialog is still open Property SheetsDialog boxes with tabbed pages.
E N D
1. Dialog Boxes andProperty Sheets Jim Fawcett
CSE791 – Advanced Windows Programming
Summer 2002
2. References Programming Windows with MFC, Jeff Prosise, 2nd Edition, Microsoft Press, 1999
Derived from presentations by Kevin Devaney and Ciahua Wang, 2001
3. Dialog 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
4. Class Hierarchy
5. Example Dialog Box Font dialog
Controls
Combo boxes
List boxes
Check boxes
Push buttons
6. Create 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
7. Using MFC AppWizard
8. Add 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
9. Dialog 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
10. Adding Shortcut Keys
11. Setting Tab Order
12. Responding 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
13. Temperature Converter
14. OnOK Processing
15. How to talk to controls - 1 Use CWnd functions
GetDlgItemText, SetDlgItemText
CheckRadioButton, GetCheckedRadioButton
CheckDlgButton, IsDlgButtonChecked
This was illustrated in Temperature Converter example
16. How to talk to controls - 2 Use info supplied in the message handler
17. How 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
18. Common Control Class Example
19. How 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
20. DDX Example
21. DDX 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
22. Dynamic 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
23. DDV Example
24. DDV Functions DDV_MinMaxByte, DDV_MinMaxInt,
DDV_MinMaxLong, DDV_MinMaxUInt,
DDV_MinMaxDWord, DDV_MinMaxFloat,
DDV_MinMaxDouble, DDV_MaxChars
25. Modal vs Modeless Modal
Display dialog by calling CDialog::DoModal
Exit by calling CDialog::OnOK or OnCancel
Usually instantiated on the stack so destruction is automatic
26. Modal vs Modeless Modeless
Display dialog by calling CDialog::Create
Exit dialog by calling DestroyWindow
Don’t call OnOK or OnCancel
Usually instantiated on the heap (new) so the dialog is not destroyed prematurely
Make sure dialog is deleted by overriding CDialog::PostNcDestroy function using “delete this” statement
27. Basic 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 Cdialog::OnOK()
28. Property Sheets Tabbed dialog boxes
User can switch between pages using mouse
MFC classes
CPropertySheet
CPropertyPage
29. Property 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()
30. How 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 page’s controls via DDX or DDV.
Derive a property sheet class from CPropertySheet.
Use CPropertySheet::AddPage() to add pages to the property sheet.
Call the property sheet’s DoModal() to display the property sheet.
31. How 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 sheet’s OK buton is clicked, the current page’s OnOK() is called.
Add message handler for Apply button, which should call the active page’s UpdateData(TRUE).
Use CPropertyPage’s SetModified() to enable or disable Apply button.
32. How to Create a Modal Property Sheet (cont.) class CFirstPage:public CPropertyPage{
public: ….
// delare member here
ptotected:
virtual void DoDataExchange(CDataExchange*); ….
};
class CMyPropertySheet:public CProperySheet{
CFirstPage m_firstPage; // first page …..
public: ….
CMyPropertySheet(…){ // constructor
AddPage(&m_firstPage); …. }
};
33. Common Dialogs CFileDialog
CPrintDialog
CPageSetupDialog
CFindReplaceDialog
CColorDialog
CFontDialog
34. CFileDialog
35. CFileDialog code