MFC 对话框和常用教程.docx

上传人:b****8 文档编号:10983023 上传时间:2023-02-24 格式:DOCX 页数:74 大小:292.53KB
下载 相关 举报
MFC 对话框和常用教程.docx_第1页
第1页 / 共74页
MFC 对话框和常用教程.docx_第2页
第2页 / 共74页
MFC 对话框和常用教程.docx_第3页
第3页 / 共74页
MFC 对话框和常用教程.docx_第4页
第4页 / 共74页
MFC 对话框和常用教程.docx_第5页
第5页 / 共74页
点击查看更多>>
下载资源
资源描述

MFC 对话框和常用教程.docx

《MFC 对话框和常用教程.docx》由会员分享,可在线阅读,更多相关《MFC 对话框和常用教程.docx(74页珍藏版)》请在冰豆网上搜索。

MFC 对话框和常用教程.docx

MFC对话框和常用教程

第五章对话框和常用控件

对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。

对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:

移动、最大化、最小化等)都可在对话框中实施,一般来说,在对话框中通过各种控件(如:

按钮、编辑框、列表框、组合框等)来和用户进行交互。

控件是在系统内部定义的用于和用户交互的基本单元。

一、对话框的使用

VisualC++提供的对话框编辑器能“可视”地进行设计、编辑,并可用

ClassWizard为对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等操作的许多功能函数,例如:

DoModal函数用来显示模式对话框并返回用户操作的结果。

1、模式对话框(为186附加举例页)

所谓模式对话框是指,当对话被弹出时,用户必须在对话框中进行相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。

平常我们所见到的对话框大多是模式对话框。

例:

模式对话框(通过菜单命令弹出)

1)建一个单文档(SDI)应用程序

2)创建对话框模板

InsertResource选中Dialog单击New

拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建模式对话框”。

3)鼠标右键对准对话框的任何位置单击,选择properties选项,设置ID为IDD_MYDIALOG

4)给对话框创建类

双击新建对话框的任何位置,单击OK,写类名为“CMyDlg”,保

证”CDialog”作为该类的基类。

5)创建菜单命令:

a)打开资源编辑器的菜单项Menu

b)双击IDR_MAINFRAME

c)双击右边空白菜单,点开pop_up(让它是空白),在名字处写”弹出对话框(&A)”,ID处写ID_PUPDIALOG

6)将菜单命令连接到主框架程序中,完成ID_PUPDIALOG的消息映射:

ViewClassWizard保证Classname里是CMainFrame,在ObjectIDs

里找到ID_PUPDIALOG点黑Messages里(右边)点COMMAND建立主框架对象方法并加代码:

voidCMainFrame:

:

OnPupdialog()

{CMyDlgMyDlg;

MyDlg.DoModal();//DoModal()是CDialog类成员函数,通过调用该

//函数将显示对话框。

}

7)在CMainFrame.cpp文件里加:

#include“MyDlg.h”//之后运行。

2、无模式对话框(为186附加页)

非模式对话框,弹出后,可一直保留在屏幕上,用户可继续在应用中进行其它操作或启动其它应用程序,当需要使用对话框时,只需象激活一般窗口一样激活对话框即可。

1)建一个SDI(单文档)应用程序

2)创建对话框模板

InsertResource点黑DialogNew

拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建非模式对话框”。

3)为对话框创建类

点出对话框(IDD_DIALOG1缺省的ID号),双击对话框中的任意位置,出现一个表,你点OK出现一个对话框,你写类名:

CDlg保证基类为CDialog

4)创建菜单

打开工作区MenuIDR_MAINFRAME双击空白菜单写“非模式对话框”关闭再点下面空菜单写名字“显示非模式对话框”ID处写ID_DLG.

5)添加菜单命令消息

WiewClassWizardMessageMaps保证Classname里是Wiew类(视图类),在ObjectIDS里找到ID_DLG(菜单的ID)点黑右边COMMAND双击它OK

6)a、你在Wiew.h里加:

#include“Dlg.h”

b、在public:

里加:

CDlg*dlg;//创建CDlg对象

c、在View.cpp的OnDlg()函数里加:

CMyView:

:

OnDlg()

{

dlg=newCDlg(this);

dlg->Create(IDD_DIALOG1);//使对话框摸板从资源中创建一个非

//模式对话框

dlg->ShowWindow(SW_RESTORE);//显示对话框

}

二、使用对话框编辑器(对话框编程)(187页)

*1、可建一个单文档应用程序名为“对话框编程”,在此程序中加入一个对话框:

InsertResource点黑Dialognew出现188页的图

2、拖入一些控件,对这些控件进行排序、布局、大小调整、上下对齐、测试等。

*最后在对话框IDD_DIALOG1上留一个按钮控件,其标识符为:

IDC_BUTTON1

3、识别控件工具栏(188页)

4、在加对话框时,InsertResource点开+Dialog见有7类对话框,分别了解其

不同用途(见192页)。

5、对话框的属性

A、ViewPropertiesB、按Alt+EnterC、用鼠标右键单击对话框模板Properties

都能弹出对话框的属性框,见书193页对属性General的解释。

*6、为对话框添加类(194页)

对准对话框的任意非控件区域双击鼠标,将弹出书194页图5.11所示

的对话框,询问是否为对话框资源创建一个新类单击OK弹出书194页

图5.12所示的对话框你定义一个新类的名字如:

CMyDlg(注意:

类名必

须以C打头),下面的基类Baseclass和ID标识符DialogID内容一般不改。

*7、添映射消息(195页)

接上,点OK出现“MFCClassWizard”对话框,如书195页图5.13所示(保证类名处是CMyDlg)选定点黑IDC_BUTTON1单击BN_CLICKED消息AddFunction出现书195页图5.14对话框OKEditCode

*8、添加用户代码(195页)

接上,到MyDlg.cpp文件中,写:

voidCMyDlg:

:

OnButton1()

{

MessageBox(“欢迎进入对话框的设计!

”);

}//这时运行还不见对话框,接下

*9、在程序中使用对话框(196页)

由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类

的头文件,并定义一个类对象,然后就可以使用该类的相关成员。

项目工作区FileView打开应用程序的.cpp文件,在前面加:

#include“MyDlg.h”

在InitInstance函数体中的returnTRUE语句之前添加下列代码:

CMyDlgdlg;

dlg.DoModal();//DoModal()函数是负责对话框的显示和终止。

运行!

则直接显示出对话框,单击按钮则出现“欢迎进入对话框的设计”

的字样。

本例建的CMyDlg类及以后在各个项目中建立的类,在文档、视图、主框

架类中都可同样使用。

(1)添加对话框资源

对话框资源类型:

IDD_DIALOGBAR对话条,往往和工具条放在一起。

IDD_FORMVIEW一个表状风格的对话框,用于无模式对话框或视图类

IDD_OLE_PROPPAGE_LARGE一个大的OLE属性页

IDD_OLE_PROPPAGE_SMALL一个小的OLE属性页

IDD_PROPPAGE_LARGE一个大属性页,用于属性对话框

IDD_PROPPAGE_MEDIUM一个中等大小的属性页,用于属性对话框

IDD_PROPPAGE_SMALL一个小的属性页,用于属性对话框

(2)改变对话框的属性

ID框:

修改或选择对话框的标识符名称

Caption框:

输入对话框的标题名称,中英文均可。

Font按钮:

单击此按钮可选择字体的种类(如宋体)及尺寸(如9号)

Xpos/Ypos:

对话框左上角在父窗口中的X,Y坐标都为0时表示居中

Menu框:

默认值为无,当对话框需要选单时输入或选择指定的选单资源

Classname:

默认值为无,它提供C/C++语言编程时所需要的对话框类名,对

MFC类库的资源文件来说,该项不被激活

三、控件的创建和使用方法(197页)

控件是在系统内部定义的能够完成特定功能的控制程序单元。

在应用程序中使用控件不仅简化了编程,还能完成常用的各种功能。

为了更好地发挥控件的作用,用户还必须理解和掌握控件的属性、消息以及创建和使用方法。

注:

控件工具栏及各按钮含义:

1、控件的选择2、静态文本3、组框4、复选框5、组合框6、水平滚动条

7、旋转按钮8、滑动条9、列表视图10、标签11、复合编辑12、月历

13、用户定制工具14、静态图片15、编辑框16、按钮17、单选框18、列表框

19、垂直滚动条20、进展条21、热键22、树形视图23、动画24、日期选择

25、IP地址26、组合框的扩展(从左边往下数,再从右边往下数)

1、控件的创建和使用方法(197页)

控件的创建方法有2种:

1)是在对话框摸板中用编辑器指定控件,也就是说,将控件的父窗口指定为对话框,如:

上面的BUTTON1按钮控件。

2)是将控件看做任意一窗口的子窗口,并通过调用相应的Create函数来创建。

下面我们用第2种方法创建控件(此种方法涉及的内容复杂,也不能发挥对话框编辑器可视化编程的优点,故不提倡此种方法,而用第一种方法)。

(1)打开上个项目,在CMyDlg类的头文件MyDlg.h里添加一个按钮类CButton

指针变量:

(public:

里)

CButton*m_btnWnd;

(2)按Ctrl+W或ViewClassWizard打开MFClassWizard对话框,并切换到

MessageMaps页面,在ObjectIDs列表中选定点黑CMyDlg项,并在

Message列表中找到WM_INITDIALOG消息点黑AddFunctionEditCode

(3)添加代码:

BOOLCMyDlg:

:

OnInitDialog()

{-----

m_btnWnd=newCButton();//构造按钮控件

//下面“”按钮上的字,创建子窗口|窗口最初是可见的|创建的是按键按钮

m_btnWnd->Create(“你好”,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

CRect(20,20,120,60),this,201);//创建

CFont*font=this->GetFont();//获取对话框的字体

m_btnWnd->SetFont(font);//设置控件字体

returnTRUE;//(程序原有的)

}

代码中,Create用来创建一个按钮控件,该函数的第一个参数用来指定该按钮的标题,第二个参数用来指定控件的风格,第三个参数用来指定它在父窗口中的位置和大小,第四个参数用来指定父窗口指针,最后一个参数是指定该控件的标识值。

WS_CHILD表示按钮是作为对话框的一个子窗口来创建的。

WS_VISIBLE是使控件可见。

BS_PUSHBUTTON表示创建的是按键按钮。

(4)编译并运行

2、控件的数据交换和数据效验(数据成员)(198页)

使用ClassWizard可以很容易地定义一个控件的成员变量及其数据范围。

例如:

上面的CMyDlg类的按钮控件IDC_BUTTON1添加并使用其成员变量m_MyBtn,步骤如下:

(1)打开上例项目,ViewClassWizardMemberVariables选定Classname

中为CMyDlg,然后在ControlIDs列表中点黑IDC_BUTTON1AddVariable

(或双击鼠标左键),弹出AddMemberVariable对话框,如书198页图5.17

写好数据成员名:

m_MyBtn下面Category和Variablestype里的不动

OK见表上已建成(如:

书199页图5.18)

下面是建成员变量的三个对话框图:

(2)再向对话框加一个编辑控件,并加成员变量m_strEdit,类型为CString置

数值为Value(注:

Category框内可选择Value或Control两种类型。

Control所对应的变量类型就是MFC为该控件封装的控件类。

Value所对应的是数值类型。

不同控件所提供的关联的数值类型各不同,例如:

对于编辑框来说,Variablestype中的数值类型有CString(字符串),int,UINT(32位无符号整数),long(32位带符号整数),DWORD(32位无符号整数,段地址和相关的偏移),float,double,BYTE(8位无符号整数),short,BOOL等)。

OK后在下面写20为最大值。

(下面见书199—200页)

打开本项目的MyDlg.h见到:

CButtonm_MyBtn;

CStringm_strEdit;

在MyDlg.cpp里见到:

m_strEdit=_T(““);

在DoDataExchange函数体内见:

DDX_Control(pDX,IDC_BUTTON1,m_MyBtn);

DDX_Text(pDX,IDC_EDIT1,m_strEdit);//IDC_EDIT1是标识m_strEdit

//是成员变量

DDV_MaxChars(pDX,m_strEdit,20);//校验m_strEdit的最大字符个数不超过20。

(3)将CMyDlg:

:

OnButton1()修改成:

voidCMyDlg:

:

OnButton1()

{

UpdateData();//默认参数值是真TRUE

m_MyBtn.SetWindowText(m_strEdit);

//GetDlgItem(IDC_BUTTON1)->SetWindowText(“欢迎”);//用此条代替

//上条也行,

//单击Button1按钮,此按钮名就是“欢迎”。

}

之后运行该程序,当在编辑框输入Hello后,单击Button1按钮,则该按

钮的名称就变成了编辑框中的内容Hello了,见书200页。

八、控件的通用属性(201页)

在控件的属性对话框中含有许多属性,如:

书201页(按钮的属性对话

框),General(一般属性)、Styles(控件的风格)、ExtendedStyles(控件的扩

展风格)。

Styles和ExtendedStyles是用来设定控件的外观的、辅助功能的。

不同控件具有不同的风格和扩展风格。

见201页表5.5.

控件的General属性:

ID:

控件的标识符,每种控件都有默认的ID,例如按钮控件为IDC_BUTTON1

Caption:

控件的标题,大多数控件都有默认的标题,例如按钮控件为Button1

Visible:

指定控件初始化时是否可见

Group:

指定控件组中的第一个控件,如果该项被选中,则此控件后的所有控件均被看成一组,成组的目的是可以让用户键盘方向键在同一组控件中进行切换

HelpID:

若该项被选中,则为该控件建立一个上下文相关的帮助标识符

Disabled:

指定控件初始化时是否禁用

TabStop:

若该项被选中,则用户可以使用Tab键来选择控件

九、控件的消息

对于每个消息,系统都会用一个MSG结构来记录(见201页)。

对一般控件来说,其通知消息是一条WM_COMMAND消息(见202页)。

例:

1、打开上面的项目“对话框”

2、ViewClassWizard在CMyDlg里(左边的ObjectIDs里点黑CMyDlg)

在Message里找到OnCommand点黑AddFunctionEditCode写:

BOOLCMyDlg:

:

OnCommand(WPARAMwParam,LPARAMlParam)

{

WORDnCode=HIWORD(wParam);//控件的通知消息

WORDnID=LOWORD(wParam);//控件的ID号

if((nID==201)&&(nCode==BN_CLICKED))//用户单击按钮产生的消息

MessageBox("你按下了\"你好\"按钮!

");

----

}//WORD是16位无符号整数

//EN_CHANGE是编辑框中的文本被改变时发出的消息

BN_CLICKED是当用户单击按钮产生的消息:

单击对话框中的“你好”按钮,弹出"你按下了\"你好\"按钮!

"的消息对话框。

由于Create创建的控件无法用ClassWizard直接映射其消息,因此上述方法祢补了ClassWizard的不足,使用时要特别注意。

见书202页通知消息是所有Windows控件所共有的:

NM_CLICK在控件中单击鼠标左键按钮

NM_DBLCLK在控件中双击鼠标左键按钮

NM_RDBLCLK在控件中双击鼠标右键按钮

NM_RETURN当控件具有输入焦点时按下ENTER键

NM_SETFOCUS控件得到输入焦点

NM_KILLFOCUS控件失去输入焦点

NM_OUTOFMEMORY没有足够的内存使控件

十、常用控件

静态控件CStatic用于向用户显示一些几乎固定不变的文字或图形描述

按钮CButton用于产生某些命令或改变某些选项设置

编辑框CEdit可完成文字的输入、输出双向操作,使用户能查看并编辑文字

列表框CListBox显示一个列表,让用户从中选取一个或多个项

组合框CComboBox它把列表框和编辑框有机地组合在一起,用户不仅能选择

列表中已有的项,还能编辑出新的项

滚动条CScrollBar通过滚动块在滚动条上的移动来改变某些数值

进展条CProgressCtrl用于指示一个操作的进度

旋转按钮CSpinButtonCtrl又称“上下控制”,是一对箭头按钮,用户单击它们

可以增加或减小某个值

滚动条CSliderCtrl是一个包含一个滑动块和可选的刻度线,用户可以用鼠标

或方向键沿某个方向移动滑动块

图象列表CImageList是一系列相同大小的图象的集合

标签控件CTabCtrl类似于一个笔记本的分割器或一个文件柜上的标签,使用它

可以将一个窗口或对话框的相同区域定义为多个页面

1、静态控件

静态控件是用于显示一个字符、框、矩形、图标、位图或增强的图元文件,它可以用做标签、框或用于分隔其它的控件。

一个静态控件一般不接受用户输入,也不产生通知消息。

在对话框编辑器的控件工具栏中,属于静态控件的有:

静态文本(StaticText)、

组框(GroupBox)、图片控件(Picture)三种。

其中,静态图片控件的属性对话框如:

书204页图5.21所示,表5.7列出了其一般属性和风格的各个项的意义。

我们可以选择Type(图片类型)、Image(图象资源)两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中。

另外,用户还可设置其风格来改变控件的外观以及图象在控件的位置等。

静态图片控件的General和Style属性对话框:

Type图片类型,用户可以从中选择Frame(框)、Rectangle(矩形区域)、Icon(图标)、Bitmap(位图)、EnhancedMetafile(增强图元文件,它是各种绘图命令的集合)

Image当图片类型为Icon或Bitmap时,通过此框可选择指定的资源ID号

设置Frame和Rectangle的颜色,它可以是black(黑色)、white(白色)、

gray(灰色)、或者是具有3D外观的etched(腐蚀色)

Sunken选中时,在控件的周围有下沉的边框

Notify选中时,当用户单击或双击图片时会向其父窗口发出通知消息

Rightjustify选中时,用户重置图片大小,图片右下角是固定不变的

Border选中时,图片周围有边框

Centerimage选中时,图片显示在控件中央,其余区域由图片左上角的象素

颜色来填充

Realsizeimage选中时,按图片的原始大小来显示,超过控件区域的部分被裁剪

在它的属性中,用户可以选择Type(图片)、Image(图象资源)两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中,另外,用户还可以设置其风格来改变控件的外观以及图象在控件的位置等。

例1:

图片控件(将一个.bmp图形显示在图片控件上)(附加举例)

1)建一个单文档(SDI)应用程序

2)创建对话框模板:

InsertResource点黑Dialognew

3)将图片控件Picture拖到对话框上,并拉大些,将OK和CANCEL拖到下面。

4)向项目中插入一个.bmp图片:

InsertResource点黑BitmapImport在

出现的表中要下拉出:

所有文件(*.*)在某处找到一个.bmp图形Import放到此项目中。

5)将这个图片放到图片控件上

右键对准图片控件单击出现属性框Type处下拉置Bitmapimage处下拉置IDB_BITMAP1,就将图片加到了图片控件上。

6)为刚才建的对话框添加类

双击新建对话框的任何位置OK类名写:

CMyDlg

7)创建一个菜单项,用来显示对话框

ResourceViewMenuIDR_MAINFRAME双击空白菜单点POPUP

ID处写:

ID_DLG菜单名写:

显示图片对话框关闭

8)将菜单命令映射到View中去

ViewClassWizard要加到View中ID-DLGCOMMANDEditCode

(在View.h的头部加:

#include“MyDlg.h”在public:

下加:

CMyDlg*dlg;)并

加代码:

CMyView:

:

OnDlg()

{dlg=newCMyDlg(this);

dlg->Create(IDD_DIALOG1);

dlg->ShowWindow(SW_RESTORE);

}

9)编译运行

2:

按钮

常见的按钮有三种类型:

(204页)

(1)按键按钮

按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命

令按钮。

(2)单选按钮

其外形是在文本前有一个圆圈,当它被选中时,就标上一个黑点。

(3)复选框

其外形是在文本前有一个空心方框,当它被选中时,就加上一个“∨”标记

1)按钮的消息

常见的按钮映射消息有两个:

(1)BN_CLICKED(单击按钮)

(2)BN_DOUBLE_CLICKED(双击按钮)

见下图:

2)按钮选中操作

最常用的按钮操作是设置或获取一个按钮或多个按钮的选中状态。

CButton类的以下2个成员函数原型如下:

voidSetCheck(intnCheck);//设置指定按钮的选中状态

intGetCheck()const;//获取指定按钮的选中状态

其中:

nCheck和GetCheck函数返回的值可以是:

0表示不选中,1表示选中,

2表示不确定(仅用于三态按钮)

而对于多个单选按钮的选中状态的设置或获取,需要使用CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton,它们的原型如下:

voidCheckRadioButton(intnIDFirstButton,intnIDLastButton

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1