You are on page 1of 29

5 3-

dialog box GUI


(control)

MFC
MFC DDX
DDV

6 4-

5.1

MFC
CDialog

5.1.1
dialog box
OKcancel

GUI Windows

Student MessageBox 327 MFC \


5-1 a)
1


5-1 b) 5-1 c) 8
GDI

a)

b)

c)

5-1

5.1.2

(modal dialog box)

(modeless dialog box)

5-1

2
Windows

(common dialog boxes/)Windows

comdlg32.dll
Windows system32 Win32
MFC Windows
C++
CFileDialogCColorDialogCFontDialogCFindReplaceDialogCPageSetupDialog
CPrintDialog

(user dialog box)


Windows

5-2

5-3

MFC DDX = Dialog Data Exchange

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

ab| Edit Control


ID ID IDC_NAME IDC
C Control[]

Group Box

[]
Caption(&S)

(&M)

(&E) (&P) (ID


IDC_MATHIDC_ENG IDC_COMP)

Ctrl

5-6

10

5-11
2
Student.rc
IDD_INPUT DIALOGEX 0, 0, 148, 100

5-11

STYLE DS_SETFONT | DS_MODALFRAME |


DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON
PUSHBUTTON
LTEXT

"",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

CInputDlg::CInputDlg(CWnd* pParent /*=NULL*/)


: CDialog(CInputDlg::IDD, pParent)
, m_sName(_T(""))
, m_iMath(0)
, m_iEng(0)
, m_iComp(0)
{
}

DDX DoDataExchange

void CInputDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_NAME, m_sName);
DDV_MaxChars(pDX, m_sName, 4);
DDX_Text(pDX, IDC_MATH, m_iMath);
DDV_MinMaxInt(pDX, m_iMath, 0, 100);
DDX_Text(pDX, IDC_ENG, m_iEng);
DDV_MinMaxInt(pDX, m_iEng, 0, 100);
DDX_Text(pDX, IDC_COMP, m_iComp);
DDV_MinMaxInt(pDX, m_iComp, 0, 100);
}

5.2.4 DDX DDV


MFC DDXDialog

16

Data eXchange DDVDialog Data Validation

DDX

DDV

DDX DDV
DoDataExchange DDX CDialog CWnd
UpdateData 5-16
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );

UpdateData(FALSE);
DDX

UpdateData(TRUE);
ALSE);

DDV

5-16 DDX DDV


bSaveAndValidate

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"

CString m_sName; int m_iMath, m_iEng,


m_iComp; L""7590
80

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

);

IDOK IDCANCELvirtual INT_PTR DoModal( );

(C:\Images\lena.bmp)CString GetPathName( ) const;

(lena.bmp)CString GetFileName( ) const;

(bmp)CString GetFileExt( ) const;

(lena)CString GetFileTitle( ) const;

BOOL GetReadOnlyPref( ) const;

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 );

IDOK IDCANCELvirtual INT_PTR DoModal( );

COLORREF GetColor( ) const;

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

5.4.2 API MessageBox


CWnd SDK API
MessageBox 5-19 a
MessageBox(NULL, L"", L"", MB_OK);
1.

int MessageBox(
HWND hWnd,
LPCTSTR lpText,

//
//

LPCTSTR lpCaption, //
UINT uType

//

);
CWnd SDK
::
::MessageBox(NULL, L"", L"", MB_OK);

5.4.3 MFC AfxMessageBox


MFC
int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK,
UINT nIDHelp = (UINT) -1 );
AfxMessageBox(L" "); 5-19 b AfxMessageBox(L"
");

5.4.4 MFC CTaskDialog


CTaskDialog VC10MFC 10.0 CObject
Windows Vista/7

CTaskDialog(
23

const CString& strContent, //


const CString& strMainInstruction, //
const CString& strTitle, //
int nCommonButtons = TDCBF_OK_BUTTON //
| TDCBF_CANCEL_BUTTON,
int nTaskDialogOptions = TDF_ENABLE_HYPERLINKS //
| TDF_USE_COMMAND_LINKS,
const CString& strFooter = _T("") //
);
5-19 c
#include "afxtaskdialog.h" //

CTaskDialog tdlg(L"", L"", L""); //


tdlg.DoModal(); //

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

void AddPage(CPropertyPage *pPage);

virtual INT_PTR DoModal();

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

10. DDX DDV


11.
12.
13.
14.
15.
16. API CWnd
17. CTaskDialog MFC Windows

18. MFC
19.

8. Student

29

You might also like