MFC常用控件
2、初始化对话框。设置或者修改数据成员m_ofn, m_ofn的数据成员是OPENFILENAME类型的。 OPENFILENAME结构体中有几个成员变量较常用: lpstrinitalDir:文件对话框初始文件夹; Flag:各种标志,如:OFN_ALLOWMULTISELECT 表示允许选择多个文件。 3、调用成员函数DoModal,显示文件对话框。
创建文件对话框对象时,系统执行CFileDialog( )构造函 数来建立此对象,可以通过它的参数在构造函数中设定 文件对话框的初值,决定是打开文件还是保存文件以及 设置过滤器,只把符合要求的文件在列表框中显示。
使用CFileDialog对话框的步骤如下: 1、创建CFileDialog对象, CFileDialog的构造函数如下:
对话框的分类
对话框有两种类型:模式对话框和无模式对话框。 1. 模式对话框 所谓“模式对话框”是指对话框被弹出后,用户必须 在对话框中作出相应的操作;在退出对话框之前,会 阻止其他应用程序的运行(包括它所在的应用程序)。 2. 无模式对话框 所谓“无模式对话框”是指当对话框被弹出后,将一 直保留在屏幕上,但不影响其他应用程序的运行,用 户可以继续在对话框所在的应用程序中进行其他操作; 当需要使用对话框时,只需像激活一般窗口一样单击 对话框所在的区域即可。例如在Microsoft Word中的 “查找”和“替换”对话框。
一个典型的过滤字符串如下面所示 CString szFilter=“All files(*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc||”;
例子:创建一个文件对话框fd1: CFileDialog fd1(TRUE,"*.txt",“test",1,szFilter);
MFC常用控件
对话框的组成
在VC++中,对话框主要是由对话框资源和对话框类组 成: 1. 对话框资源 对话框资源中描述的是对话框的大小、风格等特性, 以及对话框中控件的类型和它们的位置。定义对话框 资源最简单、最有效的方法就是使用Visual C++中的 资源编辑器。 2. 对话框类 对话框资源所提供的仅仅是一个数据结构,要利用所 创建的对话框资源,必须要创建以它作为资源的对话 框类,对话框类是从CDialog类中派生出的子类,它提 供了编程接口来管理对话框。
CNDialog *m_pDlg; m_pDlg=new CNDialog( ); m_pDlg->Create(); „„ delete m_pDlg;
数据交换 MFC类库使用数据交换(DDX)机制在对话框的控件和 对话框类的数据成员之间交换数据 UpdateData(TRUE)将数据从对话框的控制传递到对话 框对象的数据成员,缺省的调用在对话框的OnOk( )函 数中; UpdateData(FALSE)将数据传送到对话框中,缺省的调 用发生在对话框的OnInitDialog( )创建一个有模式对 话框时。 用户可以在任何时候调用UpdateData( )进行数据交换, 该函数参数缺省值为TRUE。 示例: 显示Edit控件内容的两种方式
建立对话框类:
对话框资源建立后还不能直接使用,通常需要为对 话框建立一个新类,然后创建对话框类的对象,才 能使用这个资源。
CDialog类提供的函数成员
函数成员名 功 能 Cdialog 构造Cdialog对象 Create 初始化CDialog对象 CreateIndirect 从内存中的对话框模板建立无模式对话框 DoModal 显示有模式对话框 EndDialog 关闭有模式对话框 GotoDlgCtrl 把焦点移到对话框中指定的控件 InitModalIndirect 从内存中的对话框建立有模式对话框;存储 参数,直到调用DoMoal函数 NextDlgCtrl 把焦点移到下一个控件 OnCancel 按下Cancel按钮或ESC键 OnInitDialog 优先完成对话框的初始化 OnOK 按下OK按钮 OnSetFont 在显示文本时,指定对话框使用的字体 PrevDlgCtrl 把焦点移到以前的对话框 SetHelpID 设置上下文相关的帮助ID
4、如果DoModal函数返回IDOK,则用户可调用文件 对话框的成员函数获取信息 if(fd1.DoModal()==IDOK) m_sFilePath=fd1.GetPathName();
使用CColorDialog对话框的步骤如下: 1、创建CColorDialog对象, CColorDialog的构造函数如 下: CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL );
按钮的消息:
通常使用的有BN_CLICKED(单击)和BN_DOUBLECLICKED(双击)
按钮选中操作 设置和获取指定按的选中状态: void SetCheck(int nCheck); int GetCheck() const; 其中nCheck和GetCheck()的返回值可以是:0(不选中)、1(选 中)、2(不确定); 设置或获取多个单选按钮的选中状态: void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton); int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);
模式和非模式对话框共享相同的基类CDialog,并且它们都可 以使用对话框编辑器来创建对话框资源。
我们可以通过调用成员函数DoModal( )来显示一个有模式的对话框, 当函数返回时,对话框将不再存在。而无模式对话框在它本身处于 激活状态时,还允许用户使用其他的应用程序。 创建无模式对话框要比创建模式对话框复杂一些:首先要调用默认 构造函数构造一个对话框窗口对象;然后通过调用CDialog的成员 函数Create来创建对话框窗口,而不是调用成员函数DoModal。并 且当对话框仍然留在屏幕上时,控制已经立刻返回了。
静态控件
静态控件是用于显示一个字符串、框、图标、位图或 增强的图元文件。 在对话框的控件工具栏中,属于静态控件的有:静态 文本、组框和静态图片。 静态文本控件(Static Text Control); 静态图片(Picture Control);属性有:Center,image,Real size,Type,Image和Color
在VC++6.0中,新插入一个对话框,会在对话框中预设 了两个缺省按钮:OK和Cancel。 OK按钮接受用户对对话框的动作 Cancel按钮取消用户的动作。 运行时如果用户单击OK按钮,对话框关闭并返回IDOK 值; 运行时如果用户单击Cancel按钮,对话框关闭并返回 IDCANCEL值。
2、单项选择特定方法 列表框的默认模式是单选项模式; 所有的通用方法均适用于单选项列表框。 只有两个类方法专门处理单选项列表框: int GetCurSel() const; 获得当前选择列表框项的下标(基于0) int SetCurSel(int nSelect); 设定列表框的某个选项呈选中状态。 3、多项选择特定方法
按钮
常见的按钮有如下几种类型:命令按钮、单选按钮和复选 按钮。
命令按钮(button):命令按钮适用于消息的发送,通常用于执行某个命 令。 复选框(Checkboxes)按钮 :常用于只有两种完全相反状态的情况下 单选按钮(Radio button) :适用于同一组属性相同的数据中选一个数据。
两种对话框在用资源编辑器设计和使用Class Wizard 进行编程时的方法基本一致。但在创建和退出窗口时的 方式有所不同。 在创建时,模式对话框是由系统自动分配内存空间,因 此在退出对话框时,对话框对象会自动删除。而无模式 对话框则是需要用户来指定内存,退出时还需用户自己 来删除对话框对象。 在退出时,两种对话框所使用的终止函数不一样。模式 对话框通过调用CDialog::EndDialog()来终止,而无 模式对话框则是通过调用CWnd::DestroyWindow() 来 终止。
列表框(ListBox)
列表框常用于从众多数据中选某一项,如在对话框里, 用列表框选择文件名、目录等。 按性质来说,列表框有单选、多选、扩展多选和非选四 种类型。
列表框的基本操作 1、通用方法
通用方法用来获得和设置列表框数据的值和属性, 所有的CListBox列表框,包括单选列表框、多选列表框 和自绘列表框等都有这些方法。
5、列表框的通知消息
组合框
组合框结合了列表框和编辑框的特点,可以把常用的 的项列在列表框中以供选择,而同时提供编辑框,允 许用户输入列表框中所没有的新项。 组合框的主要风格特征,可分为三类:简单组合框 (Simple)、下拉式组合框(Dropdown)、下拉式列表框 (DropList)。 简单组合框、下拉式组合框都包含列表框和编辑框, 但简单组合框中的列表项不需要下拉,而是直接显示 出来。 组合框的常见操作基本与列表框类似,但获取字符串 的操作与列表框不同: ---int GetLBText(int nIndex, LPTSTR lptszText); ---void GetLBText(int nIndex, CString &rString);