Professional Documents
Culture Documents
MFC
MFC DDX
DDV
6 4-
5.1
MFC
CDialog
5.1.1
dialog box
OKcancel
GUI Windows
5-1 b) 5-1 c) 8
GDI
a)
b)
c)
5-1
5.1.2
5-1
2
Windows
comdlg32.dll
Windows system32 Win32
MFC Windows
C++
CFileDialogCColorDialogCFontDialogCFindReplaceDialogCPageSetupDialog
CPrintDialog
5-2
5-3
DDX
5.1.3
MFC Windows
CDialog
DoModal
Create + ShowWindow
CDialog MFC
CCommonDialog CDialog 5-4
MFC
OLE Object Linking and Embedding
Windows
VC08
5.2
(user dialog box)
5-4
5.2.1
ID
MFC CDialog
ID
DoModal
5
IDOK
5-5
2
ID
OnInitDialog
Dialog
Dialog
ID
ID ID
ID
MFC
CDialog
Value
DoModal
5-5
OnOK
[IDOK]
DoModal
CDialog Create
CWnd ShowWindow
Student
5.2.2
5-6
Dialog
DialogVS ID IDD_DIALOG1
DialogIDOKIDCANCEL
5-7 VS
VS 6-2 VS
5-8 5-9
5-6
5-7
5-8
5-9
/ 5-7
4.1.2 46
5-10
ID
ID
IDD_DIALOG1 IDD_INPUTIDD
D Dialog[]
CaptionDialog
Aa Static Text
+ Aa
(&N)
Caption Static
5-10
Caption
(&N)
&N N
Alt+N
Caption
*.rc
ID IDC_STATIC = -1
ID
Group Box
[]
Caption(&S)
(&M)
Ctrl
5-6
10
5-11
2
Student.rc
IDD_INPUT DIALOGEX 0, 0, 148, 100
5-11
"",IDOK,91,27,50,14
"",IDCANCEL,91,57,50,14
"(&N)",IDC_STATIC,9,9,35,8
EDITTEXT
IDC_NAME,44,7,44,14,ES_AUTOHSCROLL
GROUPBOX
"(&S)",IDC_STATIC,7,26,78,65
LTEXT
EDITTEXT
LTEXT
EDITTEXT
LTEXT
EDITTEXT
"(&M)",IDC_STATIC,17,40,36,8
IDC_MATH,55,36,25,14,ES_AUTOHSCROLL
"(&E)",IDC_STATIC,19,54,34,8
IDC_ENG,55,54,25,14,ES_AUTOHSCROLL
"(&P)",IDC_STATIC,11,72,42,8
IDC_COMP,55,70,25,14,ES_AUTOHSCROLL
END
3
CDialog m_mlDlg;
Create ID
m_mlDlg.Create(IDD_INPUT);
11
ShowWindow
5-1 b
m_mlDlg.SetDlgItemText(IDC_NAME, L"");
m_mlDlg.SetDlgItemInt(IDC_MATH, 75);
m_mlDlg.SetDlgItemInt(IDC_ENG, 90);
m_mlDlg.SetDlgItemInt(IDC_COMP, 80);
m_mlDlg.ShowWindow(SW_SHOW);
5.2.3
DDX DDV
MFC
5-12
MFC
5-13
Student
\MFC
CInputDlg
CDialog VC10 CDialogEx VC08
CDHtmlDialog MFC
VC10 CDialogEx
5-12
IDIDD_INPUT
[] InputDlg.h InputDlg.cpp
VS CInputDlg
12
5-13 MFC
2
5-14
CInputDlg
\
ID ID
ID ID_NAME
Value
Control
Value CString
intfloat
13
5-14
m_sName
m_sName
4
m_iMath
0 100 5-15
5-15
14
5-1
5-1
ID
IDC_NAME
IDC_MATH
IDC_ENG
IDC_COMP
m_sName
m_iMath
m_iEng
m_iComp
CString
int
int
int
4
0~100
0~100
0~100
3
MFC
1 InputDlg.h
#pragma once
// CInputDlg
class CInputDlg : public CDialog
{
DECLARE_DYNCREATE(CInputDlg)
public:
CInputDlg(CWnd* pParent = NULL);
//
virtual ~CInputDlg();
//
enum { IDD = IDD_INPUT };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
CString m_sName;
int m_iMath;
int m_iEng;
int m_iComp;
};
15
// DDX/DDV
VS Bug ID IDD_INPUT
#include "resource.h"
2 InputDlg.cpp
DDX DoDataExchange
16
DDX
DDV
DDX DDV
DoDataExchange DDX CDialog CWnd
UpdateData 5-16
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
UpdateData(FALSE);
DDX
UpdateData(TRUE);
ALSE);
DDV
bSaveAndValidate
MFC CDialog::OnInitDialog UpdateData(FALSE);
CDialog::OnOK UpdateData(TRUE);
UpdateData
17
5.2.5
Student
Student (&D)
(&I)ID_DLG_INPUT
StudentView.cpp #include
"InputDlg.h"#include "stdafx.h"
ID_DLG_INPUT
OnDlgInput
5-1 b
DoModal IDOK
void CStudentView::OnDlgInput()
{
// TODO:
CInputDlg dlg; //
dlg.m_sName = m_sName; //
dlg.m_iMath = m_iMath;
dlg.m_iEng = m_iEng;
dlg.m_iComp = m_iComp;
if(dlg.DoModal() == IDOK) { //
m_sName = dlg.m_sName; //
m_iMath = dlg.m_iMath;
m_iEng = dlg.m_iEng;
m_iComp = dlg.m_iComp;
}
18
5.3
(common dialog boxes) Windows
Windows
API MFC C++
CFileDialog
CColorDialog
CFontDialog 9.2.2
CFindReplaceDialog
CPageSetupDialog 11.2.4
CPrintDialog 11.2.4
CCommonDialog
Student (&O)
ID_DLG_OPEN (&C)ID_DLG_COLOR
5.3.1
CFileDialog
explicit CFileDialog(
BOOL bOpenFileDialog, // TRUEFALSE
LPCTSTR lpszDefExt = NULL, //
LPCTSTR lpszFileName = NULL, //
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //
LPCTSTR lpszFilter = NULL, //
CWnd* pParentWnd = NULL //
DWORD dwSize = 0 // OPENFILENAME =0
19
);
ID_DLG _OPEN
void CStudentView::OnDlgOpen()
{
// TODO:
wchar_t *filters = L" (*.bmp)|*.bmp|
(*.gif)|*.gif| (*.jpg;*.jpe)|*.jpg;*.jpe|
(*.*)|*.*||";
CFileDialog fileDlg(TRUE, L"bmp", L"*.bmp",
OFN_HIDEREADONLY, filters);
if (fileDlg.DoModal() == IDOK) {
CString sPath = fileDlg.GetPathName();
MessageBox(sPath, L"");
}
}
5-17
20
5-17
5.3.2
CColorDialog
CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0,
CWnd* pParentWnd = NULL );
ID_DLG_COLOR OnDlgColor
m_crCol COLORREF m_crCol;
m_crCol = RGB(255, 0, 0); 5-18
void CStudentView::OnDlgColor() {
CColorDialog colDlg(m_crCol, CC_FULLOPEN);
if (colDlg.DoModal() == IDOK)
m_crCol = colDlg.GetColor();
}
21
5-18
5.4
3.3.5 3-27
C*View
MessageBox CWnd C*App C*Doc
API MessageBox MFC AfxMessageBox VC10
CTaskDialog
5.4.1 MessageBox
MessageBox CWnd CWnd CView
int MessageBox( // 0 ID
LPCTSTR lpszText, //
LPCTSTR lpszCaption = NULL, //
UINT nType = MB_OK // OK
);
nType MB_ABORTRETRYIGNORE//MB_OK
MB_OKCANCEL / MB_RETRYCANCEL /
MB_YESNO /MB_YESNOCANCEL//
Cancel Esc IDCANCEL
ID IDABORT IDCONTINUE
IDIGNORE IDNO IDOK IDRETRY
22
IDTRYAGAINIDYES
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
//
//
LPCTSTR lpCaption, //
UINT uType
//
);
CWnd SDK
::
::MessageBox(NULL, L"", L"", MB_OK);
CTaskDialog(
23
5-19 d
tdlg.SetMainIcon(TD_ERROR_ICON); //
tdlg.SetFooterText(L""); //
tdlg.SetFooterIcon(TD_INFORMATION_ICON); //
tdlg.SetExpansionArea(L"\n ", //
L"", L"");
//
/*int options = tdlg.GetOptions();
options |= TDF_EXPANDED_BY_DEFAULT;
tdlg.SetOptions(options);*/
a)
b)
c)
24
d)
5-19 Windows 7
5.5
tab dialog box
CWnd CPropertySheet
CDialog CPropertyPage
5-20
5-20
5.5.1
Student 5.2.2
5-21 5-2
25
5-21
ID
5-2
ID
IDD_MATH
IDC_ANAL
CMathPg
IDD_COMP
CCompPg
IDD_COMM
CCommPg
m_iAnal
int
0~100
IDC_ALGE
IDC_PROB
m_iAlge
m_iProb
int
int
0~100
0~100
IDC_PROG
m_iProg
int
0~100
IDC_DATA
m_iData
int
0~100
IDC_ORGA
m_iOrga
int
0~100
IDC_POLI
IDC_ENGL
IDC_PHYS
m_iPoli
m_iEngl
m_iPhys
int
int
int
0~100
0~100
0~100
5.5.2
5-2 5-2
5.2.3 CPropertyPage 5-22
5.5.3
Student /
26
5-22
int m_iAnal;
int m_iPhys;
m_iAnal = 87;
m_iPhys = 76;
#include "MathPg.h"
#include "CompPg.h"
#include "CommPg.h"
void Construct( //
LPCTSTR pszCaption, //
CWnd* pParentWnd = NULL, //
UINT iSelectPage = 0 //
);
27
5-23
//
CMathPg pgMath;
CCompPg pgComp;
CCommPg pgComm;
//
pgMath.m_iAnal = m_iAnal;
pgComm.m_iPhys = m_iPhys;
//
CPropertySheet ps(L"");
//
ps.AddPage(&pgMath);
ps.AddPage(&pgComp);
ps.AddPage(&pgComm);
//
if(ps.DoModal() == IDOK) {
//
m_iAnal = pgMath.m_iAnal;
m_iPhys = pgComm.m_iPhys;
}
5-23
1.
2.
28
3.
4.
5.
6.
VC08
7.
8.
9.
DDX DDV
18. MFC
19.
8. Student
29