MFC开发文档
- 格式:doc
- 大小:171.50 KB
- 文档页数:63
MFC程序设计范文MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows系统的应用程序框架,它提供了一系列的C++类,用于简化Windows程序的开发过程。
MFC基于面向对象的编程思想,提供了许多封装好的类和函数,使得开发者可以更加方便地进行界面设计、事件处理、数据管理等操作。
1. 创建MFC应用程序项目:在Visual Studio中选择新建项目,选择MFC应用程序向导,按照向导的指引完成项目的创建。
2.设计界面:MFC提供了可视化界面设计工具,开发者可以通过拖拽控件、设置属性等方式设计应用程序的界面布局。
控件包括按钮、文本框、列表框、菜单等等。
3.处理事件:事件是用户操作界面时发生的动作,如按钮被按下、列表框的选项被选中等。
在MFC中,可以通过重载响应函数的方式来处理事件。
每个控件都有一系列的事件处理函数,开发者可以根据需要选择合适的函数进行重载,然后在函数中编写事件处理的代码。
4.数据管理:MFC提供了一些数据管理的类,用于处理数据的读取、存储、处理等操作。
开发者可以使用这些类来操作数据库、读取文件、保存设置等。
除了上述基本流程,MFC还提供了一些其他的功能,如线程管理、消息处理、打印输出等。
开发者可以根据实际需求选择适合的功能进行使用。
然而,MFC程序设计也存在一些缺点。
首先,MFC只能在Windows系统上运行,不具备跨平台的能力。
其次,由于MFC是一套较为庞大的类库,如果没有掌握好MFC的使用方法,可能会导致开发效率低下,代码冗长。
另外,MFC的界面设计工具相对较为简陋,对于一些复杂的界面效果可能无法满足需求。
总体来说,MFC是一套适用于Windows系统的程序框架,可以帮助开发者快速搭建Windows程序的框架。
它提供了丰富的类库和工具,使得开发者能够更加轻松地进行界面设计、事件处理、数据管理等操作。
然而,MFC也有一些缺点,如只能在Windows系统上运行、界面设计工具相对简陋等。
MFC程序设计范文MFC(Microsoft Foundation Classes)是一种用于Windows操作系统的C++类库,它是Microsoft Visual C++应用程序开发的重要组成部分。
MFC提供了一种基于对象的编程模型,可以大大简化Windows GUI(图形用户界面)应用程序的开发过程。
通过MFC库,开发人员可以利用现有的类和功能来创建强大、可靠且可扩展的Windows应用程序。
在MFC程序设计中,通常需要遵循以下步骤:1. 创建一个MFC应用程序项目:首先,在Visual Studio中创建一个新的MFC应用程序项目。
在项目配置向导中,选择应用程序类型(对话框型、SDI型或MDI型)、支持的功能(ActiveX控制和OLE支持)、使用的界面风格等。
2. 编写应用程序代码:在MFC应用程序项目中,主要的代码文件是CWinApp类的派生类和CWnd类的派生类。
- CWinApp类的派生类通常包含应用程序的初始化和结束代码,包括应用程序的全局设置、消息处理程序的注册和初始化等。
- CWnd类的派生类通常用于创建主窗口或对话框,处理消息、事件和用户交互。
3. 设计用户界面:通过Visual Studio的可视化设计器,可以方便地设计应用程序的用户界面。
可以通过拖放控件、调整属性和布局来创建界面元素,如按钮、文本框、列表框等。
4.实现功能代码:在MFC应用程序中,可以使用MFC库提供的丰富功能和类来实现各种功能,如文件操作、数据库访问、多线程处理等。
5. 编译和调试程序:完成代码编写后,可以通过Visual Studio的编译器和调试器来编译和调试应用程序。
可以通过断点、单步执行等功能来查看程序的执行过程和变量的值。
6.发布应用程序:完成调试后,可以将应用程序打包成可执行文件,然后发布给用户使用。
可以将可执行文件、相关的库文件和资源文件打包成安装程序,通过安装程序来安装和部署应用程序。
MFC/VC++调用word进行报表制作使用word进行数据报告的制作可谓非常方便,word具有非常强大的编辑、排版功能。
使用word能够制作出内容丰富、样式精美的报告。
我们在工作中当然会有报表报告的需求,如果能够在MFC/VC++里面能够调用word进行word格式报告的自动生成,岂不是一件非常惬意的事情。
我在工作当中需要对大量的数据或者各种测试数据进行统计分析,最终的统计分析结果总归要汇总为一份报告,不管是内部使用也好还是外部提供给客户也好,一份内容翔实、格式精美的报告自然必不可少。
我对MFC/VC++也不是高手,只是业余爱好自己动动手做些东西。
自然,低于VC操作word可谓完全没有经验,在网络上面也查找了很多资料,都是些只言片语,不能真正的领略通过VC使用word的方法。
于是自己摸索了几个礼拜,可谓耗时甚长,劳心劳力啊。
MS的东西,封装的也太严实了,对于函数部分只有些许的简单介绍,往往看的云里雾里。
没有实践还是不行啊!体会自己的经历,虽然辛苦但也有收获。
不想其他朋友再继续走我走过的路,浪费时间、精力,故成文以共享。
废话少说,进入正题吧。
第一步,当然我们需要首先导入word需要的库。
通过ClassWizard->Add Class选择From a Type Library…定位需要的库文件导入。
本例应该使用C:/Program Files/Microsoft Office/OFFICE11/MSWORD.OLB,在这里尽可选择所有的类导入,反正用的时候都有了,呵呵。
完成这一步,我们得到两个文件msword.h和msword.cpp,那就加入你的工程吧。
说明:如果需要在VC++/MFC开发程序操作word/excel等office元素,那么需要对必要的类型库进行导入.下面是office系列的类型库参考,导入类型库时候请选择正确的类型库进行导入.应用程序类型库Microsoft Access 97Msacc8.olbMicrosoft Jet Database 3.5DAO350.dllMicrosoft Binder 97Msbdr8.olbMicrosoft Excel 97Excel8.olbMicrosoft Graph 97Graph8.olb Microsoft Office 97Mso97.dll Microsoft Outlook 97Msoutl97.olb Microsoft PowerPoint 97Msppt8.olb Microsoft Word 97Msword8.olbMicrosoft Access 2000Msacc9.olb Microsoft Jet Database 3.51DAO360.dll Microsoft Binder 2000Msbdr9.olb Microsoft Excel 2000Excel9.olb Microsoft Graph 2000Graph9.olb Microsoft Office 2000Mso9.dll Microsoft Outlook 2000Msoutl9.olb Microsoft PowerPoint 2000Msppt9.olb Microsoft Word 2000Msword9.olbMicrosoft Access 2002Msacc.olb Microsoft Excel 2002Excel.exe Microsoft Graph 2002Graph.exe Microsoft Office 2002MSO.dll Microsoft Outlook 2002MSOutl.olb Microsoft PowerPoint 2002MSPpt.olbMicrosoft Word 2002MSWord.olbMicrosoft Office Access 2003Msacc.olbMicrosoft Office Excel 2003Excel.exeMicrosoft Office Graph 2003Graph.exeMicrosoft Office 2003MSO.dllMicrosoft Office Outlook 2003MSOutl.olbMicrosoft Office PowerPoint 2003MSPpt.olbMicrosoft Office Word 2003MSWord.olb注意:这些类型库的默认位置是:Office 版路径本Office 97C:/Program Files/Microsoft Office/OfficeC:/Program Files/Microsoft Office/OfficeOffice2000Office XP C:/Program Files/Microsoft Office/Office10OfficeC:/Program Files/Microsoft Office/Office112003Dao350.dll 和Dao360.dll 的默认位置是C:/Program Files/Common Files/Microsoft Shared/Dao。
mfc单文档例子以下是一个简单的MFC单文档(SDI)应用程序的示例:1. 首先,创建一个新的MFC应用程序项目。
在Visual Studio中,选择“文件”菜单,然后选择“新建”->“项目”。
在“新建项目”对话框中,选择“MFC应用程序”,然后输入项目名称和位置,并单击“确定”。
2. 在“MFC应用程序向导”中,选择“单文档”作为应用程序类型,并单击“完成”按钮。
3. 在生成的代码中,找到`CMainFrame`类。
这是应用程序的主窗口类。
4. 在`CMainFrame`类的`OnCreateClient`函数中,添加以下代码:```cppvoid CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext pContext){// 创建视图窗口m_(_T("My View"), WS_CHILD WS_VISIBLE WS_BORDERWS_HSCROLL WS_VSCROLL, CRect(0, 0, 800, 600), this,ID_VIEW_WIN);}```5. 在`CMainFrame`类的`OnCreate`函数中,添加以下代码:```cppBOOL CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;// 创建工具栏和状态栏CToolBarCtrl tb;CRect rect(0, 0, 800, 24);(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPERCBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPER CBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(this);m_(0, ID_VIEW_STATUSBAR, SBPS_STRETCH, 0);m_(1, ID_VIEW_STATUSBAR2, SBPS_STRETCH, 0);m_(2, ID_VIEW_STATUSBAR3, SBPS_STRETCH, 0);m_(0, SBPS_NORMAL);m_(1, SBPS_NORMAL);m_(2, SBPS_NORMAL);m_(0, _T("Ready"));m_(1, _T("Ready"));m_(2, _T("Ready"));return TRUE;}```6. 编译并运行应用程序。
MFC程序设计文档——NBA现役超级巨星数据库设计者:马千学号:01509219指导老师:郑雪清目录Part One 需求分析 (3)NBA现役巨星资料库 (3)MFC程序设计 (3)数据流图 (4)Part Two 系统设计 (5)概要设计 (5)详细设计 (5)最终效果 (10)Part Three 编码实现 (10)Part Four 系统测试 (12)Part Five 总结 (13)Part One 需求分析NBA现役巨星资料库随着NBA(National Basketball Association)近二十年来在中国市场的扩张,如今中国积攒的相当一部分NBA的忠实球迷,更随着中国如王治郅,姚明,易建联等中国球员加入NBA,更多的中国人开始了解NBA。
从而NBA得各种信息变得炙手可热,如NBA巨星们的视频,个人资料,周边故事,赛事,等等。
这些信息,现如今不仅仅在网络上被各种人使用使用,在日常生活中也是很值得爱好NBA的人去了解的。
本人也是一位NBA的爱好者,在一次资料的搜集中,我想要查询网络上“现役NBA巨星的资料”时,可并没有发现,只有“50大”(NBA历史上前五十的巨星)诸多资料。
其现役巨星的资料大多都是分散的记录。
在当下,“50大”只能是NBA的周边或历史,而现役巨星才是现在球迷的追求对象,所以一套完整的现役巨星资料可以称得上是一份绝对的值得珍藏的资料。
但是整理一份资料简单,只需在各种网站中搜索巨星的名字,相关资料自然会弹出,可如何去让它具有一个更高的集成性,如何去让它更符合我们拥有如今操作理念,不在是单一的单窗口字面文档。
设计一个基于数据库且可实现多窗口,在形式上多样化,这就是此次MFC程序设计的主导方向。
MFC程序设计既然程序是基于数据库的,固然数据库是必须建立的,在MFC建立数据库的方式有很多,期中最简单操作的是Access。
数据库的调用可通过ODBC。
而形成形式上的突破方法是很多的,如联入多媒体,插入视图,增加功能等等。
MFC中实现多文档MFC(Microsoft Foundation Class)是用于Microsoft Windows操作系统的应用程序框架。
多文档是指在一个应用程序中同时打开和管理多个文档的能力。
下面是如何在MFC中实现多文档的步骤:1.创建一个新的MFC应用程序项目:- 在Visual Studio中选择“文件”>“新建”>“项目”。
- 在“左侧导航栏”中选择“Visual C++”>“MFC”。
-选择“MFC应用程序”并点击“下一步”。
-输入项目名称,并选择存储位置,然后点击“下一步”。
-选择“多文档”应用程序类型,并确保“使用多文档视图”选中,然后点击“完成”。
2.修改文档类:- 打开“xxxDoc.h”文件(xxx为你的应用程序名称)。
-在文档类声明中添加一个成员变量来保存文档的数据。
3.修改视图类:- 打开“xxxView.h”文件。
-在视图类声明中添加用户界面控件(如按钮、菜单等)来实现文档的交互操作。
-在视图类声明中,添加成员变量来保存文档数据的指针。
- 在视图类的实现文件中,重写OnInitialUpdate(函数,初始化视图。
4.修改主框架窗口类:- 打开“MainFrm.h”文件。
-在主框架窗口类声明中,添加成员变量来保存文档视图的指针。
- 在主框架窗口类的实现文件中,重写OnCreateClient(函数,创建并管理多个文档视图的布局。
5.添加命令处理函数:- 打开“xxxView.cpp”文件。
-在视图类的实现文件中,添加命令处理函数,例如保存文档、打开新文档等。
6.调试和测试:-编译并运行应用程序。
-打开多个文档,观察每个文档的窗口布局和视图。
-测试各种文档操作,如保存、打开、关闭等。
以上是使用MFC框架实现多文档的基本步骤。
根据你的具体需求,你可以进一步定制和扩展多文档功能,例如添加更多自定义的菜单和工具栏选项、实现文档之间的数据交互等。
mfc 单文档中的document作用MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的框架,其中的单文档(Single Document)模式是一种常见的应用程序架构。
在单文档模式下,应用程序只打开一个文档窗口,用户可以在该窗口中编辑和管理文档内容。
本文将围绕MFC单文档中的document作用展开讨论。
我们需要明确document在MFC单文档模式中的作用。
Document是MFC中的一个类,它主要负责管理文档的数据以及提供对文档内容的操作。
每个文档窗口都对应一个document对象,document对象存储了该窗口中所显示的文档的数据。
换句话说,document是连接应用程序界面和实际数据的桥梁,它负责数据的读取、保存以及对数据的操作。
在MFC单文档模式中,document起到了至关重要的作用。
首先,它负责将文档的数据从外部存储(如文件)加载到内存中,并在文档窗口中进行显示。
当用户对文档进行编辑时,document会跟踪这些编辑操作,并将其反映在内存中的数据中。
同时,document 还负责将这些编辑操作同步到外部存储,以保证数据的持久性。
除了数据的读写操作,document还提供了一系列的方法和接口,用于对文档数据进行处理和管理。
例如,document可以提供一些查询接口,方便用户根据特定条件来搜索文档内容。
同时,document还可以实现一些数据处理的功能,比如对文档中的数据进行排序、过滤等操作。
这些功能的实现都是通过对document进行扩展和定制来实现的。
document还可以处理与其他应用程序的交互。
通过MFC提供的接口,document可以与其他应用程序进行数据交换,比如将文档数据导出为其他格式的文件,或者打开其他应用程序生成的文件。
这种交互使得应用程序的功能更加丰富和灵活。
总结起来,MFC单文档中的document起到了连接应用程序界面和实际数据的桥梁作用。
mfc创建连续扇区的文件MFC(Microsoft Foundation Class)是微软提供的用于快速开发Windows应用程序的编程框架。
在MFC中,创建文件并写入数据是一项常见的操作。
本文将介绍如何使用MFC创建一个连续扇区的文件,并向其中写入数据。
一、MFC创建文件在MFC中,可以使用CFile类来创建文件。
下面是一个使用MFC创建文件的例子:```CFile file;CString filePath = _T("C:\\test.txt");if (file.Open(filePath, CFile::modeCreate | CFile::modeWrite)) { // 文件打开成功,可以进行写入操作file.Close();}```在上述代码中,首先创建了一个CFile对象,然后调用Open 函数来打开文件。
Open函数的第一个参数是文件路径,可以指定文件所在的目录和文件名。
modeCreate标志表示如果文件不存在,则创建文件;modeWrite标志表示以写入模式打开文件,即可以写入数据。
如果文件打开成功,则可以进行写入操作。
二、连续扇区的文件在某些场景下,需要创建一个连续扇区的文件,即文件的数据被存储在硬盘的连续扇区中。
为了创建一个连续扇区的文件,可以使用CFile::GetPosition函数获取当前文件指针的位置,并将文件指针移动到下一个扇区的起始位置。
下面是一个示例代码:```CFile file;CString filePath = _T("C:\\test.bin");if (file.Open(filePath, CFile::modeCreate | CFile::modeWrite)) { // 文件打开成功,可以进行写入操作BYTE buffer[512];memset(buffer, 0, sizeof(buffer));// 写入 10 个连续扇区的数据for (int i = 0; i < 10; i++) {file.Write(buffer, sizeof(buffer));// 将文件指针移动到下一个扇区的起始位置file.Seek(sizeof(buffer), CFile::current);}file.Close();}```在上述代码中,首先创建了一个CFile对象,然后调用Open 函数来打开文件。
MFC单文档工程文档及序列化一、修改文档标题:(以下都是在MFC单文档工程Graphic下)1、单击【文件/新建】菜单项,或者程序启动时,程序会进入到CGraphicDoc类的OnNewDocument函数,该函数是【文件/新建】命令处理的一部分,是由框架调用的一个虚函数,用于建立一个文档。
通过该函数设置程序标题:BOOL CGraphicDoc::OnNewDocument(){if (!CDocument::OnNewDocument())return FALSE;// TODO: add reinitialization code here// (SDI documents will reuse this document)SetTitle("MY MFC");//设置程序标题为MY MFC。
return TRUE;}提示:当单击保存时,默认文件名会是设置的文档名。
2、通过IDR_MAINFRAME字符串资源修改文档标题在ResourceView选项卡下->展开String Table文件夹->双击String Table字符串资源->找到ID 为IDR_MAINFRAME的字符串资源->在头两个”\n”间添加文档标题。
符串资源的各个子串。
实际上利用MFC AppWizard生成应用程序框架的第四步,单击【Advanced】按钮也可以修改IDR_MAINFRAME字符串中的子串。
3、OnNewDocument函数的调用过程OnNewDocument函数并不是一个消息响应函数,它只是一个虚函数。
(1)、程序启动时OnNewDocument函数的调用过程,第一次启动程序时,在OpenDocumentFile函数内部创建了文档类对象,同时还创建了框架类对象和视类对象。
这就是MFC提供的文档/视类结构的一个特点:每当有一份文档产生时,总是会产生一个文档类对象、框架类对象和视类对象,它们三位一体来为这份文档服务。
我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。
在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。
所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。
Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。
表6.1 Windows标准控件控件MFC类描述动画CAnimateCtrl显示连续的AVI视频剪辑按钮CButton用来产生某种行为的按钮,以及复选框、单选钮和组框组合框CComboBox编辑框和列表框的组合编辑框CEdit用于键入文本标题头CHeaderCtrl位于某一行文本之上的按钮,可用来控制显示文件的宽度热键CHotKeyCtrl用于通过按下某一组合键来很快的执行某些常用的操作图象列表CImageList一系列图象(典型情况下是一系列图标或位图)的集合。
图象列表本身不是一种控件,它常常是和其它控件一起工作,为其它控件提供所用的图象列表列表CListCtrl显示文本及其图标列表的窗口列表框CListBox包括一系列字符串的列表进度CProgressCtrl用于在一较长操作中提示用户所完成的进度多格式文本编辑CRichEditCtrl提供可设置字符和段落格式的文本编辑的窗口滚动条CScrollBar为对话框提供控件形式的滚动条滑块CSliderCtrl包括一个有可选标记的滑块的窗口旋转按钮CSpinButtonCtrl提供一对可用于增减某个值的箭头静态文本CStatic常用于为其它控件提供标签状态条CStatusBarCtrl用于显示状态信息的窗口,同MFC类CStatusBar类似续表6.1控件MFC类描述选项卡CTabCtrl在选项卡对话框或属性页中提供具有类似笔记本中使用的分隔标签的外观的选项卡工具条CToolBarCtrl具有一系列命令生成按钮的窗口,同MFC类CToolBar类似工具提示CToolTipCtrl一个小的弹出式窗口,用于提供对工具条按钮或其它控件功能的简单描述树CTreeCtrl用于显示一系列的项的继承结构前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。
Windows标准控件在以下环境下提供:* Windows 95* Windows NT 3.51及以后版本* Win32s 1.3* 注意:* Visual C++ 4.2及以后版本不再支持Win32s。
(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。
这种控件过去被称为OLE控件。
本书将在专门的章节中来讲述关于ActiveX控件的知识。
这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。
(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX控件以外,MFC 还提供了另外三种控件,它们由下面的三个类进行封装:* 类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。
* 类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。
* 类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。
在本章我们仅讲述第一类控件,即Windows标准控件。
所涉及的内容包括各个控件的使用及相应的技巧。
第一节使用对话框编辑器和ClassWizard对于大多数Windows标准控件,我们一般都使用对话框编辑器来将它们添加到对话框中。
图6. 1 在ResourceView中选择对话框IDD_DIALOGDEMO_DIALOG图6. 2 控件的Properties对话框图6. 3 对话框编辑器的Controls工具窗口在下面的过程中,我们将一个编辑框控件添加到在第四章创建的基于对话框的MFC框架应用程序的主对话框窗口中。
1. 首先,在Workspace窗口的ResourceView选项内双击DialogDemo resources\Dialog节点下的IDD_DIALOGDEMO_DIALOG图标。
上面的操作如图所示。
2. 用鼠标选中标有"要做......"的静态文本控件。
右击鼠标,从上下文菜单中选择Properties,打开如图6.2所示的对话框,在Caption文本框中输入新的控件文本:"在下面的文本框中输入一些字符",然后将静态文本控件拖动到对话框的左上角。
3. 从Controls工具窗口(如图6.3所示,如果在你的资源编辑器中看不到该工具窗口,可以在工具条上右击鼠标,从上下文菜单中选择Controls)中选择编辑控件图标,在对话框中绘制一个编辑框控件,如图6.4所示。
在该编辑框控件的Properties窗口的General选项卡中输入其ID为IDC_EDIT。
然后在Styles 选项卡下将Multiline复选框划上勾,并消除Auto HScroll复选框前的勾。
4. 右击该编辑框控件,从上下文菜单中选择ClassWizard命令,打开ClassWizard对话框,该对话框看起来如图6.5所示。
图6. 4 向对话框中添加一个编辑框控件图6. 5 ClassWizard对话框单击Member Variables选项卡,确信在Project处选择了DialogDemo,在Class name处选择了CDialogDemoDlg。
现在我们为刚才添加的编辑框控件IDC_EDIT添加一个数据映射入口。
在Control IDs处选择IDC_EDIT,单击右边的Add Viable按钮。
打开如图6.6所示的对话框。
在Member variable name处链接变量名m_strEdit (这里m表示该变量为类CDialogDemoDlg 的一个成员变量,str表明其类型为字符串,即类CString),在Category下拉列表中选择Value (另一种选择是Control,两种选择的不同将在后面的内容中讲述),在Variable type 下拉列表中选择CString (还有其它很多数据类型可供选择,但由于这里编辑框中的内容为一字符串,因此CString是最恰当的选择)。
单击OK关闭对话框。
图6. 6 为控件映射添加成员变量5. 检查一下现在的ClassWizard对话框(图6.7)与图6.5相比有何不同。
在图6.7所示的对话框中下方的Maximum characters文本框中输入50。
由字面意思可以很容易猜出其含义,即将编辑框IDC_EDIT中可能的最长字符串的大小限制为50。
单击OK关闭对话框。
图6. 7 使用ClassWizard设置数据验证方案6. 从Workspace窗口的ClassView中双击类CDialogDemoDlg的OnInitDialog成员函数,使用下面的代码来代替位于语句return TRUE;前的// TODO注释:m_strEdit="您好! 请在这里输入一些字符串。
";UpdateData(FALSE);7. 在ClassView中双击类CDialogDemoApp的InitInstance成员函数,使用下面的代码来找替位于选择支if (nResponse == IDOK)下的//TODO注释:AfxMessageBox(dlg.m_strEdit);然后将同一成员函数中的下面的代码行删掉(或注释掉):m_pMainWnd = &dlg;8. 编译并运行该应用程序。
显示如图6.8所示的对话框。
图6. 8 示例程序DialogDemo的运行结果在图6.8所示的文本框中输入一些字符,单击"确定"。
随即弹出如图6.9所示的消息框。
该消息框复述了用户在图6.8所示的对话框中的输入。
我们还发现,在图6.8所示的对话框中,当输入字符串达到一定的长度之后,我们不可以再输入更多的字符,这是我们在前面设置了Maximum characters为50的结果。
图6. 9 以消息框的形式反馈输入的字符串下面我们来看在上面的步骤中都完成了什么。
首先我们使用资源编辑器向对话框模板中添加这些标准控件,这一步的概念很清晰,因此并不难理解。
然后,我们打开了所绘制的编辑框的Properties (属性)对话框。
先将其控件ID设置为IDC_EDIT。
这时如果打开头文件Resource.h,就会发现宏IDC_EDIT被定义为常量1001。
不过,事实上在很多情况下我们并不需要关心每一控件的ID的具体值,而只需要记住相应的助记符。
对于这里的编辑框控件,我们只需要记住IDC_EDIT即可,而不需要关心它等于1001。
接着,我们在Styles选项卡中设置了Multiline属性,同时清除了Auto HScroll属性,两者共同作用使用得编辑框IDC_EDIT支持多行文本,并且如文本行的长度超过编辑框宽度时自动回行。
下面的步骤是最重要的一步,我们动用了功能强大的工具ClassWizard。
首先,我们将编辑框与一个CString对象相关联,这使用了一种被称为Dialog Data Exchange (DDX)的机制。
在这种机制中,我们先在处理函数OnInitDialog或对话框类的构造函数中对对话框对象的成员变量进行初始化,在对话框显示之前,框架的DDX机制将成员变量的值传递给对话框中的控件。
这个过程在成员函数DoModal或Create被调用的过程中发生。
类CDialog中对OnInitDialog成员函数的默认实现调用了类CWnd成员函数UpdateData来初始化对话框中的控件。
这时我们就可以看到前面的第6步还可在具有下面的几种变通方案:1. 将代码行m_strEdit="您好! 请在这里输入一些字符串。
";移到对基类的OnInitDialog成员函数的调用之前,即位于下面的代码之前:CDialog::OnInitDialog();2. 将代码m_strEdit="您好! 请在这里输入一些字符串。
";移到类CDialogDemoDlg的构造函数中。
对于上面的两种方法,与前面第6步中使用的方法相比,我们没有必要调用类CWnd的成员函数UpdateData。
因为该函数在类CDialog的成员函数OnInitDialog中将被调用。
这三种方法之间并没有明确的优劣之分,在很多情况下,它们分别适用于不同的场合。