第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院 E-mail:yanxuanhui@fjnu.edu.cn.

Slides:



Advertisements
Similar presentations
软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
Advertisements

Chapter 7 心意-記憶與失憶 第一節 記憶力 第二節 注意力 第三節 失憶.
实证 作业:语言调查 赵万林 哲社学院 学号:
全面准确学习领会 党的十八精神.
普通话与说话训练 第六章 会话的艺术.
首都卫生发展科研专项 2014年申请指南解读 2013年9月17日.
过程性保存文本格式的实现 计算概论小课题 王元康.
《职业病危害项目申报办法》解读 2012年7月.
计算机高级程序设计 第五章.
生活課程教科書轉化教學實例分享 生活課程輔導團 蕉埔國小王美娟.
入库验收 讲课人:卢玉娟 《仓储管理》.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
微博: weibo.com/zhnitj QQ:
Visual Basic.NET 程序设计语言课程内容
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
第二十八章 開發新的VCL元件 雖然BCB內提供了很多VCL元件,但是一定還有一些我們常常需要用的介面並沒有製作成VCL元件,或是一些個人化的介面,我們也有需要做成VCL元件。在第十三章,我們將介紹如何自行開發新的VCL元件。
進階輸出入元件(一) 本書第三章已介紹Form 、Label 、Edit 及Button 等最基本的輸出入元件, 本章將繼續介紹一些可以提昇輸出入視覺效果的元件, 例如CheckBox 、RadioButton 及RadioGroup 等17 個進階元件, 學習本章將可提昇使用介面的親和性。 核對框(CheckBox)
Lotus Domino R7 Designer
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
Basis基本操作、使用者 管理與權限設定
第5章 图形和文本输出.
Chapter 6 Advanced UI Design.
EndNote X6 Advance your Research and Publish Instantly
Windows 程式設計 (使用 C++ / C#)
Visual C++ Windows Programming
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
一天學會MFC 滕薇鈞
简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序
高等視窗程式設計 GUI的使用(Dialog Base) 游子宜.
第1章 Windows应用程序框架的 创建与消息处理
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
第八讲 MATLAB图形用 户界面设计.
VC++开发实例 张荣梅 2007年2月.
Introduction to Multimedia Coding
数据分析绘图工具 ——Origin6.0.
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
第 10 章 Windows用户界面 10.1 Windows消息与命令 10.2 单文档与多文档程序 10.3 对话框与常用组件
第7章图形、文本和位图 7.1概述 7.2图形设备接口 7.3图形绘制 7.4字体与文字处理 7.5在对话框及控件中绘图 7.6综合应用.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
Visual C++ Windows Programming
第八章 文档/视图结构应用程序 8.1 文档/视图结构 8.2 图形与文字输出 8.3 定时器 8.4 鼠标和键盘消息处理 8.5 对话框
第九章 各種對話方塊的建立 視窗介面可以說是最友善的人和電腦間的溝通介面,然而對話方塊就好像是電腦和使用者之間的對話通道。開檔案有開檔案的方式、存檔有存檔的介面、印表機設定、字型選擇、尋找字串、置換字串等等,在Win32的環境中,這類的對話方塊實在是太多了。在這一章我們將帶領大家進入設計對話方塊的世界。
Animation(動畫) 靜宜大學資工系 蔡奇偉 副教授
点击此处添加标题 点击此处添加标题 点击此处添加标题 点击此处添加标题 点击此处添加标题 TEXT HERE
第五章: 輸入與輸出.
Speaker: Liu Yu-Jiun Date: 2009/4/29
第十二讲 菜单、工具栏和状态栏 严宣辉 数学与计算机科学学院
72% 29% 33% ADD YOUR TITLE HERE 点击此处添加文本信息。
《面向对象程序设计与Visual C++6.0教程》
BEEP and Sound 授課:ANT 日期:2014/5/28.
MFC及其应用.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Inheritance -II.
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
功能表的建立 製作.
Inspiration From Above 1 Chinese Evangelical Free Church
B A C D ADD YOUR TEXT ADD YOUR TEXT ADD YOUR TEXT ADD YOUR TEXT
第10章媒体控制接口 10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类.
ADD YOUR TITLE HERE ADD YOUR NAME.
Click here to add your title
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
中式烹调技艺 第五章.
第2章 Java语言基础.
本课内容 接下来的几节课,我们要利用C语言开发一些游戏 本节课开发一个俄罗斯方块游戏 游戏规则.
生命銀行 生命銀行.
手工编写第一个 MFC程序 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Click here to add your title
03 Click here to add your text.Click here to add your text.Click here to add your text.Click here to add your text.Click here to add your text.Click here.
Presentation transcript:

第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院 E-mail:yanxuanhui@fjnu.edu.cn

第五章 对话框和常用控件 5.7 通用对话框和消息对话框 5.8 综合应用实例

5.7 通用对话框 Windows系统提供了一些标准的通用对话框,Windows系统本身提供了对这些对话框的支持,应用程序开发人员不必自己设计这些对话框。 在MFC类库中,所有这些对话框都是由公共基类CCommonDialog派生出来的。下面分几类来使用这些通用对话框。 表5.7_1 通用对话框类 类 作用 CFileDialog 打开或保存文件 CColorDialog 选择或者创建一种颜色 CFindReplaceDialog 查找替换字符串 CFontDialog 从可用的字体中选择一种字体 CPageSetDialog 设置页面参数 CPprintDialog 设置打印机和打印文档

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

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

5.7.1 文件存取对话框 使用CFileDialog对话框的步骤如下: 5.7.1 文件存取对话框 使用CFileDialog对话框的步骤如下: 1、创建CFileDialog对象, CFileDialog的构造函数如下: CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

5.7.1 文件存取对话框 Parameters bOpenFileDialog:如果为 TRUE 则构造一个文件打开(File Open)对话框,如果为FALSE则构造一个文件保存(File Save As )对话框。 lpszDefExt The 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.

5.7.1 文件存取对话框 lpszFileName The initial filename that appears in the filename edit box. If NULL, no filename initially appears. dwFlags 标志组合,允许用户自定义对话框。详细内容可以参考OPENFILENAME结构的相关信息。 其中OFN_HIDEREADONLY表示隐藏只读文件. lpszFilter 用来指定文件过滤器的字符串序列。如果指使用文件过滤器,那么只有符合指定扩展名的文件才会显示在文件列表框中。过滤字符串有特定的格式。它实际上是由多个子串组成的。每个子串又由两部分组成;第一部分是过滤器的文字说明,例如”Text file(*.txt)”;第二部分是用于匹配的字符串,例如”*.txt”。子串的两部分之间要用“|”符号分开。各子串之间也要用“|”分开,而且整个字符串的最后两个字符必须是两个连续的“||”

5.7.1 文件存取对话框 一个典型的过滤字符串如下面所示: 5.7.1 文件存取对话框 一个典型的过滤字符串如下面所示: CString szFilter=“All files(*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc||” 例子:创建一个文件对话框fd1: CFileDialog fd1(TRUE,"*.txt","*.txt",1,szFilter); 2、初始化对话框。设置或者修改数据成员m_ofn,m_ofn的数据成员是OPENFILENAME类型的。 3、调用成员函数DoModal,显示文件对话框。

5.7.1 文件存取对话框 4、如果DoModal函数返回IDOK,则用户可调用文件对话框的成员函数获取信息 5.7.1 文件存取对话框 4、如果DoModal函数返回IDOK,则用户可调用文件对话框的成员函数获取信息 if(fd1.DoModal()==IDOK) m_sFilePath=fd1.GetPathName(); 表5.7_2 CFileDialog的主要成员函数 Operations 功能 GetPathName 返回一个包含全路径文件名的CString对象 GetFileName 返回一个包含有文件名(不含路径的CString对象 GetFileExt 返回一个只含文件扩展名的CString对象 GetFileTitle 返回一个只含文件名(不含扩展名的) CString对象 GetNextPathName 返回下一个选定文件的全路径 GetReadOnlyPref 所回所选文件的只读状态 GetStartPosition 所回文件名列表中的第一个元素的位置

5.7.1 文件存取对话框 技巧:在Windows 2000/NT/XP下可以将文件对话框显示为如下形式: 5.7.1 文件存取对话框 技巧:在Windows 2000/NT/XP下可以将文件对话框显示为如下形式: 加入语句: fd1.m_ofn.lStructSize=88;

5.7.2 打印对话框 5.7.2 CPrintDialog(打印对话框类) CPrintDialog类为应用程序提供一个标准的打印环境,可以利用它来建立打印(Print)对话框和打印设置(Print Setup)对话框。 在使用AppWizard建立程序的过程中,如果在“MFC AppWizard—Step 5” 中选中Printing and Print Preview功能设定,系统便会产生相关程序。

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

5.7.3 颜色设定对话框 使用CColorDialog对话框的步骤如下: 1、创建CColorDialog对象, CFileDialog的构造函数如下: CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL ); Parameters clrInit The default color selection. If no value is specified, the default is RGB(0,0,0) (black).

5.8.3 颜色设定对话框 2、初始化对话框。设置或者修改数据成员m_cc,m_cc的数据成员是CHOOSECOLOR类型的。 dwFlags A 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();

表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.

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

5.7.4 字体对话框 使用字体对话框的具体步骤如下: 1、创建一个CFontDialog对象。CFontDialog类的构造函数如下: CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );

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

5.7.4 字体对话框 2、初始化对话框。修改或者设置数据成员m_cf,m_cf的数据成员为CHOOSEFONT结构。 3、调用成员函数DoModal,显示字体对话框。 4、如果DoModal函数返回IDOK,则用户可调用字体对话框的成员函数获取信息

5.7.4 字体对话框 表5.7_4 CFontDialog的主要成员函数 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.5 查找/替换对话框 5.7.5 CFindReplaceDialog(查找/替换对话框类) 在编辑文本时,经常会使用字符串“查找”、“替换”命令,尤其是在修改大量文本数据时特别有用。 CFindReplaceDialog类提供了标准的字符串查找和替换(Find and Replace)对话框。此类对话框是无模式的,以便在对话框中输入字符串并执行查找/替换命令时,让用户立即从原操作窗口看到该命令执行的结果。

5.7.6 OLE对话框 5.7.6 COleDialog(OLE对话框类) 它是一种高级的对话框,由此类派生以下几个对话框类: COleInsertDialog, COleConverDialog, COleChangeIconDialog, COleLinksDialog, Cole-BusyDialog, COleUpdateDialog, COlePasteSpecialDialog, COlePropertiesDialog, ColeChange-SourceDialog OLE对话框类与OLE操作有关,这里不再详细介绍。

5.7.7 消息对话框 1、概述 消息对话框只用于显示消息,它们的原型如下: int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); 这两个函数都是用于创建和显示消息对话框,只不过AfxMessageBox是全程函数,可以用在任何地方;而MessageBox只能用于控件、对话框、窗口等一些窗口类中。

5.7.7 消息对话框 参数lpszText表示在消息对话框中显示的字符串文本;lpszCaption表示对话框的标题,为NULL时使用默认标题;nIDHelp表示消息的上下文帮助ID号;nType表示消息对话框的图标类型及所包含的按钮类型。这些类型是用MFC预定义的一些标识符来指定的,参看P239表5.29和5.30。例: int nChoice=MessageBox(“要保存文件吗?”,“提问“ , MB_YESNOCANCEL|MB_ICONWARNING);

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]按钮,

5.8 编程实例 下面创建的一个程序,用户通过选择命令菜单弹出“字体”对话框,在对话框中选择字体的名称、下划线、样式、大小等属性来改变字体。 (1) 利用MFC AppWizard(exe)创建单文档应用程序TestDialog。 (2) 利用ResourceView编辑如图5.8_1所示的菜单。 (3) 利用ClassWizard按表5.8_1中的信息在CTestDialogView类中添加消息映射函数。 (4) 在CTestDialogView类中添加成员变量和成员函数,如表5.8_2所示。 (5) 编写CTestDialogView( )构造函数:

图5.8_1 IDR_MAINFRAME菜单

表5.8_1 CTestDialogView类中添加消息映射函数 对 象 消 息 函 数 ID_TEST_FONTDLG COMMAND OnTestFontdlg

表5.8_2 CTestDialogView类中的成员变量和成员函数 变量类型 变量名称 访问权限 int m_nColor protected CFont* m_pCurFont protected 函数类型 函数名称 访问权限 Void Redraw(CDC* pDC)n protected

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

(6) 编写CTestDialogView( )析构函数: CTestDialogView::~CTestDialogView( ) { delete m_pCurFont; } (7) 编写OnDraw( )函数: void CTestDialogView::OnDraw(CDC* pDC) CTestDialogDoc* pDoc = GetDocument( );

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

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

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

表5.8_3 CTestDialogDoc类的消息映射函数 (10) 利用ClassWizard按表5.8_2中的信息在CTestDialogDoc类中添加消息映射函数。  (11) 编写OnFileOpen( )函数: 表5.8_3 CTestDialogDoc类的消息映射函数 对 象 消 息 函 数 ID_FILE_OPEN COMMAND OnFileOpen ID_FILE_SAVE_AS COMMAND OnFileSaveAs

void CTestDialogDoc::OnFileOpen( ) { // TODO: Add your command handler code here CFileDialog 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); }

(12) 编写OnFileSaveAs( )函数: void CTestDialogDoc::OnFileSaveAs( ) { // TODO: Add your command handler code here CFileDialog 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); }

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

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

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

第5章上机练习题3 设计一个使用通用对话框CFileDialog打开一个文文件,并用一个文本框显示的程序,如下图: