42
1 第第 MFC 第第第第第第第3 第第第 第第第第第第第第第第 E-mail [email protected]

第十一讲  MFC 常用控件的使用( 3 )

  • Upload
    lottie

  • View
    249

  • Download
    7

Embed Size (px)

DESCRIPTION

第十一讲  MFC 常用控件的使用( 3 ). 严宣辉. 数学与计算机科学学院 E-mail : [email protected]. 第五章 对话框和常用控件. 5.7 通用对话框和消息对话框. 5.8 综合应用实例. 5.7 通用对话框. Windows 系统提供了一些标准的通用对话框, Windows 系统本身提供了对这些对话框的支持,应用程序开发人员不必自己设计这些对话框。 在 MFC 类库中,所有这些对话框都是由公共基类 CCommonDialog 派生出来的。下面分几类来使用这些通用对话框。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第十一讲  MFC 常用控件的使用( 3 )

1

第十一讲  MFC 常用控件的使用( 3 )

严宣辉

数学与计算机科学学院E-mail : [email protected]

Page 2: 第十一讲  MFC 常用控件的使用( 3 )

2

5.8 综合应用实例

第五章 对话框和常用控件

5.7 通用对话框和消息对话框

Page 3: 第十一讲  MFC 常用控件的使用( 3 )

3

5.7 通用对话框 Windows 系统提供了一些标准的通用对话框, Windows 系统本身提供了对这些对话框的支持,应用程序开发人员不必自己设计这些对话框。

在 MFC 类库中,所有这些对话框都是由公共基类 CCommonDialog 派生出来的。下面分几类来使用这些通用对话框。

表 5.7_1 通用对话框类类 作用CFileDialog 打开或保存文件CColorDialog 选择或者创建一种颜色CFindReplaceDialog 查找替换字符串CFontDialog 从可用的字体中选择一种字体CPageSetDialog 设置页面参数CPprintDialog 设置打印机和打印文档

Page 4: 第十一讲  MFC 常用控件的使用( 3 )

4

5.7.1 文件存取对话框

5.7.1 文件存取对话框( CFileDialog )

在 MFC 中, CFileDialog 源于 CDialog 类,所以它具备对话框的基本行为。如果 CFileDialog 类所提供的功能无法满足要求,那么可以把 CFileDialog 作为基类,派生新的文件对话框类,添加新的函数来满足特定的需要。

Page 5: 第十一讲  MFC 常用控件的使用( 3 )

5

创建文件对话框对象时,系统执行 CFileDialog( ) 构造函数来建立此对象,可以通过它的参数在构造函数中设定文件对话框的初值,决定是打开文件还是保存文件以及设置过滤器,只把符合要求的文件在列表框中显示。

5.7.1 文件存取对话框

Page 6: 第十一讲  MFC 常用控件的使用( 3 )

6

5.7.1 文件存取对话框

使用 CFileDialog 对话框的步骤如下:

1 、创建 CFileDialog 对象, CFileDialog 的构造函数如下:

CFileDialog( BOOL bOpenFileDialog,

LPCTSTR lpszDefExt = NULL,

LPCTSTR lpszFileName = NULL,

DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVE

RWRITEPROMPT,

LPCTSTR lpszFilter = NULL,

CWnd* pParentWnd = NULL );

Page 7: 第十一讲  MFC 常用控件的使用( 3 )

7

5.7.1 文件存取对话框

Parameters

bOpenFileDialog :如果为 TRUE 则构造一个文件打开( File Open )对话框,如果为 FALSE 则构造一个文件保存( File Save As )对话框。

lpszDefExtThe default filename extension. If the user does not include an extension in the Filename edit box, the extension specified by lpszDefExt is automatically appended to the filename. If this parameter is NULL, no file extension is appended.

Page 8: 第十一讲  MFC 常用控件的使用( 3 )

8

5.7.1 文件存取对话框 lpszFileNameThe initial filename that appears in the filename edit box. If NULL, no filename initially appears. dwFlags标志组合,允许用户自定义对话框。详细内容可以参考 OPENFILENAME 结构的相关信息。 其中 OFN_HIDEREADONLY 表示隐藏只读文件 . lpszFilter

用来指定文件过滤器的字符串序列。如果指使用文件过滤器,那么只有符合指定扩展名的文件才会显示在文件列表框中。过滤字符串有特定的格式。它实际上是由多个子串组成的。每个子串又由两部分组成;第一部分是过滤器的文字说明,例如” Text file(*.txt)” ;第二部分是用于匹配的字符串,例如” *.txt” 。子串的两部分之间要用“ |” 符号分开。各子串之间也要用“ |” 分开,而且整个字符串的最后两个字符必须是两个连续的“ ||”

Page 9: 第十一讲  MFC 常用控件的使用( 3 )

9

5.7.1 文件存取对话框一个典型的过滤字符串如下面所示:CString szFilter=“All files(*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc||”

3 、调用成员函数 DoModal ,显示文件对话框。

例子:创建一个文件对话框 fd1 : CFileDialog fd1(TRUE,"*.txt","*.txt",1,szFilter);

2 、初始化对话框。设置或者修改数据成员 m_ofn ,m_ofn 的数据成员是 OPENFILENAME 类型的。

Page 10: 第十一讲  MFC 常用控件的使用( 3 )

10

5.7.1 文件存取对话框

表 5.7_2 CFileDialog 的主要成员函数Operations 功能GetPathName 返回一个包含全路径文件名的 CString对象GetFileName 返回一个包含有文件名(不含路径的 CString 对象GetFileExt 返回一个只含文件扩展名的 CString 对象GetFileTitle 返回一个只含文件名(不含扩展名的) CString 对

象GetNextPathName 返回下一个选定文件的全路径GetReadOnlyPref 所回所选文件的只读状态GetStartPosition 所回文件名列表中的第一个元素的位置

4 、如果 DoModal 函数返回 IDOK ,则用户可调用文件对话框的成员函数获取信息

if(fd1.DoModal()==IDOK) m_sFilePath=fd1.GetPathName();

Page 11: 第十一讲  MFC 常用控件的使用( 3 )

11

5.7.1 文件存取对话框

技巧:在 Windows 2000/NT/XP 下可以将文件对话框显示为如下形式:

加入语句: fd1.m_ofn.lStructSize=88;

Page 12: 第十一讲  MFC 常用控件的使用( 3 )

12

5.7.2 打印对话框

5.7.2 CPrintDialog (打印对话框类) CPrintDialog 类为应用程序提供一个标准的打印环境,可以利用它来建立打印( Print )对话框和打印设置( Print Setup )对话框。

在使用 AppWizard 建立程序的过程中,如果在“ MFC AppWizard—Step 5” 中选中 Printing and Print Preview 功能设定,系统便会产生相关程序。

Page 13: 第十一讲  MFC 常用控件的使用( 3 )

13

5.7.3 CColorDialog (颜色设定对话框类) 由于每个人对颜色喜好不一样,在图形化操作界面中,大都会提供颜色设定对话框,让用户依个人喜好重新调配桌面环境的颜色。

5.7.3 颜色设定对话框

Page 14: 第十一讲  MFC 常用控件的使用( 3 )

14

5.7.3 颜色设定对话框

使用 CColorDialog 对话框的步骤如下:1 、创建 CColorDialog 对象, CFileDialog 的构造函数如下:

CColorDialog( COLORREF clrInit = 0,

DWORD dwFlags = 0,

CWnd* pParentWnd = NULL );

Parameters

clrInitThe default color selection. If no value is specified, the default is RGB(0,0,0) (black).

Page 15: 第十一讲  MFC 常用控件的使用( 3 )

15

5.8.3 颜色设定对话框

dwFlagsA set of flags that customize the function and appearance of the dialog box. For more information, see the CHOOSECOLOR structure in the Win32 SDK documentation.

2 、初始化对话框。设置或者修改数据成员 m_cc ,m_cc 的数据成员是 CHOOSECOLOR 类型的。

3 、调用成员函数 DoModal ,显示颜色对话框。4 、如果 DoModal 函数返回 IDOK ,则用户可调用颜色对话框的成员函数获取信息

CColorDialog dlg(RGB(255,0,0));

if(dlg.DoModal()==IDOK)

m_color=dlg.GetColor();

【例】 :

Page 16: 第十一讲  MFC 常用控件的使用( 3 )

16

表 5.7_2 CColorDialog 的主要成员函数

Operations 功能GetColor Returns a COLORREF structure containing

the values of the selected color.

GetSavedCustomColors 获取用户创建的自定义颜色 .

SetCurrentColor Forces the current color selection to the specified color.

Page 17: 第十一讲  MFC 常用控件的使用( 3 )

17

5.7.4 字体对话框

5.7.4 CFontDialog (字体对话框类) 在字处理或排版软件中,或者需要采用不同字体加强显示效果时,经常需要设定字体、字型等属性,这种场合就可以利用字形设定对话框来帮助用户选择文本外型、大小、颜色及字体。

Page 18: 第十一讲  MFC 常用控件的使用( 3 )

18

5.7.4 字体对话框

CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );

使用字体对话框的具体步骤如下:1、创建一个 CFontDialog 对象。 CFontDialog 类的构造函数如下:

Page 19: 第十一讲  MFC 常用控件的使用( 3 )

19

5.7.4 字体对话框

lplfInitial指向一个 LOGFONT 结构用来初始化对话框中的字体设置 . dwFlags用于设置对话框 , 指定一个或者多个选择字体标志 . 可以使用 O或操作符” |” 将多个标志合并起来 . 详细信息请看 CHOOSEFONT 结构的相关说明 . pdcPrinter指向一个代表打印的 CDC 对象 ,若设置该参数 , 则选择的字体就为打印机所用 .

Page 20: 第十一讲  MFC 常用控件的使用( 3 )

20

5.7.4 字体对话框

2 、初始化对话框。修改或者设置数据成员 m_cf ,m_cf 的数据成员为 CHOOSEFONT 结构。3 、调用成员函数 DoModal ,显示字体对话框。

4 、如果 DoModal 函数返回 IDOK ,则用户可调用字体对话框的成员函数获取信息

Page 21: 第十一讲  MFC 常用控件的使用( 3 )

21

5.7.4 字体对话框

GetCurrentFont Retrieves the name of the currently selected font.

GetFaceName Returns the face name of the selected font.

GetStyleName Returns the style name of the selected font.

GetSize Returns the point size of the selected font.

GetColor Returns the color of the selected font.

GetWeight Returns the weight of the selected font.

IsStrikeOut Determines whether the font is displayed with strikeout.

IsUnderline Determines whether the font is underlined.

IsBold Determines whether the font is bold.

IsItalic Determines whether the font is italic.

表 5.7_4 CFontDialog 的主要成员函数

Page 22: 第十一讲  MFC 常用控件的使用( 3 )

22

5.7.5 查找 / 替换对话框

5.7.5 CFindReplaceDialog ( 查 找 / 替 换 对 话 框类) 在编辑文本时,经常会使用字符串“查找”、“替换”命令,尤其是在修改大量文本数据时特别有用。

CFindReplaceDialog 类提供了标准的字符串查找和替换 (Find and Replace) 对话框。此类对话框是无模式的,以便在对话框中输入字符串并执行查找 /替换命令时,让用户立即从原操作窗口看到该命令执行的结果。

Page 23: 第十一讲  MFC 常用控件的使用( 3 )

23

5.7.6 COleDialog ( OLE 对话框类) 它是一种高级的对话框,由此类派生以下几个对话框类:

COleInsertDialog, COleConverDialog, COleChangeIconDialog, COleLinksDialog, Cole-BusyDialog, COleUpdateDialog, COlePasteSpecialDialog, COlePropertiesDialog, ColeChange-SourceDialog

OLE 对话框类与 OLE操作有关,这里不再详细介绍。

5.7.6 OLE 对话框

Page 24: 第十一讲  MFC 常用控件的使用( 3 )

24

5.7.7 消息对话框

消息对话框只用于显示消息,它们的原型如下:

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );

int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );

这两个函数都是用于创建和显示消息对话框,只不过 AfxMessageBox 是全程函数,可以用在任何地方;而 MessageBox 只能用于控件、对话框、窗口等一些窗口类中。

1 、概述

Page 25: 第十一讲  MFC 常用控件的使用( 3 )

25

5.7.7 消息对话框

参数 lpszText 表示在消息对话框中显示的字符串文本;lpszCaption 表示对话框的标题,为 NULL 时使用默认标题;nIDHelp 表示消息的上下文帮助 ID 号; nType 表示消息对话框的图标类型及所包含的按钮类型。这些类型是用 MFC

预定义的一些标识符来指定的,参看 P239 表 5.29 和 5.30 。例:

int nChoice=MessageBox(“ 要保存文件吗 ?”,“ 提问“ ,

MB_YESNOCANCEL|MB_ICONWARNING);

Page 26: 第十一讲  MFC 常用控件的使用( 3 )

26

5.7.7 消息对话框

Return Value :

IDABORT    The Abort button was selected.IDCANCEL   The Cancel button was selected.IDIGNORE    The Ignore button was selected.IDNO    The No button was selected.IDOK    The OK button was selected.IDRETRY    The Retry button was selected.IDYES    The Yes button was selected.

返回用户选择按钮的情况,其中 IDOK 表示用户单击[OK]按钮,

Page 27: 第十一讲  MFC 常用控件的使用( 3 )

27

下面创建的一个程序,用户通过选择命令菜单弹出“字体”对话框,在对话框中选择字体的名称、下划线、样式、大小等属性来改变字体。

(1) 利用 MFC AppWizard(exe) 创建单文档应用程序 TestDi

alog 。

(2) 利用 ResourceView编辑如图 5.8_1 所示的菜单。

(3) 利用 ClassWizard按表 5.8_1 中的信息在 CTestDialog

View 类中添加消息映射函数。

(4) 在 CTestDialogView 类中添加成员变量和成员函数,如表 5.8_2 所示。

(5) 编写 CTestDialogView( ) 构造函数:

5.8 编程实例

Page 28: 第十一讲  MFC 常用控件的使用( 3 )

28

图 5.8_1 IDR_MAINFRAME菜单

Page 29: 第十一讲  MFC 常用控件的使用( 3 )

29

表 5.8_1 CTestDialogView 类中添加消息映射函数

对 象 消 息 函 数

ID_TEST_FONTDLG COMMAND OnTestFontdlg

Page 30: 第十一讲  MFC 常用控件的使用( 3 )

30

表 5.8_2 CTestDialogView 类中的成员变量和成员函数

变量类型 变量名称 访问权限int m_nColor protected

CFont* m_pCurFont protected

函数类型 函数名称 访问权限Void Redraw(CDC* pDC)n protected

Page 31: 第十一讲  MFC 常用控件的使用( 3 )

31

CTestDialogView::CTestDialogView( )

{

// TODO: add construction code here

m_pCurFont=new CFont;

m_pCurFont->CreateFont(40, 0, 0, 0, 400, FALSE, FALSE, 0,

ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY, DEFAULT_PITCH&FF_SWISS, "Arial");

}

Page 32: 第十一讲  MFC 常用控件的使用( 3 )

32

(6) 编写 CTestDialogView( )析构函数:

CTestDialogView::~CTestDialogView( )

{

delete m_pCurFont;

}

(7) 编写 OnDraw( ) 函数:

void CTestDialogView::OnDraw(CDC* pDC)

{

CTestDialogDoc* pDoc = GetDocument( );

Page 33: 第十一讲  MFC 常用控件的使用( 3 )

33

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

Redraw(pDC);

}

(8) 编写 OnTestFontdlg( ) 函数 :

void CTestDialogView::OnTestFontdlg( )

{

// TODO: Add your command handler code here

CFontDialog dlg;

int nRet=dlg.DoModal( );

if(nRet==IDOK){

Page 34: 第十一讲  MFC 常用控件的使用( 3 )

34

delete m_pCurFont;

m_pCurFont=new CFont;

m_nCurFont->CreateFont(dlg.GetSize( ),

0, 0, 0, dlg.GetWeight( ), dlg.IsItalic( ),

dlg.IsUnderline( ), dlg.IsStrikeOut( ),

ANSI_CHARSET, OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,

DEFAULT_PITCH&FF_SWISS, dlg.GetFaceName( ));

m_nColor=dlg.GetColor( );

}

CDC* pDC=GetDC( );

Redraw(pDC);

}

Page 35: 第十一讲  MFC 常用控件的使用( 3 )

35

(9) 编写 Redraw( ) 函数 :void CTestDialogView::Redraw(CDC *pDC){

CRect rect;GetClientRect(&rect);

CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(WHITE_BRUSH);

pDC->Rectangle(rect);pDC->SelectObject(pOldBrush);CFont* pOldFont;pOldFont=(CFont*)pDC->SelectObject(m_nCurFont);pDC->SetTextColor(m_nChar);pDC->TextOut(40, 40, "我爱MFC编程! ");pDC->SelectObject(pOldFont);

}

Page 36: 第十一讲  MFC 常用控件的使用( 3 )

36

(10) 利用 ClassWizard按表 5.8_2 中的信息在 CTestDial

ogDoc 类中添加消息映射函数。

 (11) 编写 OnFileOpen( ) 函数:

表 5.8_3 CTestDialogDoc 类的消息映射函数

对 象 消 息 函 数ID_FILE_OPEN COMMAND OnFileOpenID_FILE_SAVE_AS COMMAND OnFileSaveAs

Page 37: 第十一讲  MFC 常用控件的使用( 3 )

37

void CTestDialogDoc::OnFileOpen( ) {

// TODO: Add your command handler code hereCFileDialog dlg(TRUE);int ret=dlg.DoModal( );if(ret==IDOK){

CString pathName=dlg.GetPathName( );CString fileName=dlg.GetFileName( );char buf[120];sprintf(buf, "The %s file in %s is opened!",

fileName,pathName);AfxMessageBox(buf);

}}

Page 38: 第十一讲  MFC 常用控件的使用( 3 )

38

(12) 编写 OnFileSaveAs( ) 函数 :void CTestDialogDoc::OnFileSaveAs( ) {

// TODO: Add your command handler code hereCFileDialog dlg(FALSE);int ret=dlg.DoModal( );if(ret==IDOK){

CString pathName=dlg.GetPathName( );CString fileName=dlg.GetFileName( );char buf[120];sprintf(buf, "The %s file in %s is saved!",

fileName,pathName);AfxMessageBox(buf);

}}

Page 39: 第十一讲  MFC 常用控件的使用( 3 )

39

编译并运行应用程序。选择“文件”菜单中的“另存为”菜单项,将弹出如图 5.8_2 所示的对话框;选择“测试”菜单中的“字体对话框”,将弹出如图 5.8_3 所示的对话框。

Page 40: 第十一讲  MFC 常用控件的使用( 3 )

40 图 5.8_2 运行中的“保存为”对话框

Page 41: 第十一讲  MFC 常用控件的使用( 3 )

41

图 5.8_3 运行中的“字体”对话框

Page 42: 第十一讲  MFC 常用控件的使用( 3 )

42

第 5 章上机练习题 3

设计一个使用通用对话框 CFileDialog 打开一个文文件,并用一个文本框显示的程序,如下图: