对话框和常用控件Word文档下载推荐.docx
- 文档编号:16385104
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:78
- 大小:212.35KB
对话框和常用控件Word文档下载推荐.docx
《对话框和常用控件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《对话框和常用控件Word文档下载推荐.docx(78页珍藏版)》请在冰豆网上搜索。
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:
无模式对话框(为175页附加举例)
非模式对话框,弹出后,可一直保留在屏幕上,用户可继续在应用中进行其它操作或启动其它应用程序,当需要使用对话框时,只需象激活一般窗口一样激活对话框即可。
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);
//使对话框摸板从资源中创建一个非
//模式对话框
ShowWindow(SW_RESTORE);
//显示对话框
}
4.1.1资源与资源标识
VisualC++6.0将Windows应用程序中经常用到的菜单、工具栏、对话框、图标等都视为“资源”,并将其单独存放在一个资源文件中。
每个资源都由相应的标识符来区分,并且可以象变量一样进行赋值。
1.资源的分类
建一个单文档应用程序“资源”,然后将项目工作区切换到“ResourceView”页面,展开所有的节点,如书164页图4.1所示:
一个单文档应用程序所使用的资源可分为以下几类:
(1)快捷键列表(Accelerator):
快捷键列表为一系列组合键的集合,被应用程序用于引发一个动作。
该列表一般与菜单命令相关联,用于代替鼠标操作。
(2)对话框(Dialog):
为含有按钮、列表框、编辑框等各种控件的窗口。
(3)图标(Icon):
图标是代表应用程序显示在Windows桌面上的位图,它同时有32*32像素和16*16像素2种规格。
(4)菜单(Menu):
用户通过菜单可以完成应用程序的大部分操作。
(5)字串表(StringTable):
是应用程序使用的全局字符串或其他标识符。
(6)工具栏按钮(Toolbar):
是由一系列具有相同尺寸的位图组成的,它通常与一些菜单命令相对应,用于提高用户的工作效率。
(7)版本信息(Version):
版本信息包含应用程序的版本、用户注册码等相关信息。
除了上述常用资源类别外,VisualC++6.0应用程序中还可有鼠标指针、HTML等,也可以自己添加新的资源类别。
2.ID标识符
书164页图4.1中,可以看到每一个资源类别都有一个或多个相关资源,每一个资源均是由标识符来定义的。
当添加或创建一个新的资源或资源对象时,系统会为其提供默认的名称,如:
IDR_MAINFRAME等。
当然,用户也可重新命名,但要按一定的规则来进行,这样便于在应用程序代码设计时理解和记忆。
一般要遵循下列规则:
(1)在标识符名称中允许使用字母a~z、A~Z、0~9以及下划线“_”。
(2)标识符名称不区分大小写字母,如new_idd与New_Idd是相同的标识符。
(3)不能以数字开头,如8BIT是不合法的标识符。
除了上述规则外,出于习惯,VisualC++还提供了一些常用标识符定义的前缀,供用户使用(见165页表4.1)
IDR_表示快捷键或菜单相关资源
IDD_表示对话框资源
IDC_表示光标资源或控件
IDI_表示图标资源
IDM_表示菜单项
ID_表示命令项
IDS_表示字符表中的字符串
IDP_表示消息框中使用的字符串
每一个定义的标识符都保存在应用程序项目的Resource.h文件中,它的取值范围为0~65535。
在同一个程序项目中,资源标识符名称不能一样,不同的标识符的值也不能一样。
**使用对话框编辑器(对话框编程)
*4.1.2添加对话框资源:
可建一个单文档应用程序名为“对话框编程”,在此程序中加入一个对话框:
InsertResource点黑Dialognew
*4.1.4添加和布局控件:
拖入一些控件,对这些控件进行排序、布局、大小调整、上下对齐、测试等(见书170页图4.8所示控件布局工具栏)*最后在对话框IDD_DIALOG1上留一个按钮控件,其ID标识符为:
IDC_BUTTON1。
可按书171页最上的4、测试一下对话框。
*识别控件工具栏(168页)控件工具栏及各按钮含义:
(168页)
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)组合框的扩展(从左边往下数,再从右边往下数)
*对话框资源类别:
在加对话框时,InsertResource点开+Dialog见有7类对话框,分别了解其不同用途(见166页)
4.1.3设置对话框的属性
A、ViewPropertiesB、按Alt+EnterC、用鼠标右键单击对话框模板Properties
都能弹出对话框的属性框,见书167页对属性General的解释。
General(一般属性)、Styles(风格)、MoreStyles(更多风格)、ExtendedStyles(扩展风格)、
MoreExtendedStyles(更多扩展风格)等部分。
下面介绍常用的General属性:
ID框修改或选择对话框的标识符名称(如改成:
IDD_MYDIALOG)
Caption(标题栏)输入对话框的标题名称,中英文均可(我的对话框)
Font…字体按钮单击此按钮可选择字体的种类(宋体)以及字体的大小(如:
9号字)
(设置成:
宋体大小为:
9)
Xpos/Ypos对话框左上角在父窗口中的X、Y坐标,都为0时表示居中
菜单框Menu默认值为无,当对话框需要菜单时,输入或选择指定的菜单资源
Classname默认值为无,它提供C/C++语言编程时所需要的对话框类名,对
MFC类库的资源文件来说,该项不被激活
*为对话框添加类(171页)
对准对话框的任意非控件区域双击鼠标,将弹出书171页图4.12所示的对话框,询问是否为对话框资源创建一个新类单击OK弹出书172页图4.13所示的对话框你定义一个新类的名字如:
CMyDlg(注意:
类名必须以C打头),下面的基类Baseclass和ID标识符DialogID内容一般不改。
*添映射消息
ViewClassWizard出现“MFCClassWizard”对话框在Classname处选择CMyDlg在ObjectIDs里选定点黑IDC_BUTTON1单击BN_CLICKED消息AddFunctionOKEditCode(到MyDlg.cpp文件中)
*添加用户代码
接上,在MyDlg.cpp文件中,写:
voidCMyDlg:
OnButton1()
{
MessageBox(“欢迎进入对话框的设计!
”);
}//这时运行还不见对话框,接下
*在程序中调用对话框(173页)
由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类的头文件,并定义一个类对象,然后就可以使用该类的相关成员。
项目工作区FileView打开应用程序的.cpp文件,在前面加:
#include“MyDlg.h”
在InitInstance函数体中的returnTRUE语句之前添加下列代码:
CMyDlgdlg;
dlg.DoModal();
//DoModal()函数是负责对话框的显示和终止。
运行!
则直接显示出对话框,单击按钮则出现“欢迎进入对话框的设计”的字样。
本例建的CMyDlg类及以后在各个项目中建立的类,在文档、视图、主框架类中都可同样使用。
*控件的删除、复制和布局
当单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可移动控件。
若在鼠标拖动过程中还按住Ctrl键则复制控件。
若按Del键可将选取的控件删除。
*主控件(多个控件以其为主)的设置方法是按住Ctrl键或Shift键,然后用鼠标单击所要指定的控件即可。
*网格、标尺等辅助工具,见书170页图4.8(及表4.4)所示及说明
*测试对话框,见书171页最上面的说明
书上172页“添加对话框代码”的过程是:
1)为该项目添加一个对话框
2)为这个对话框加类,类名为:
CMyDlg
3)在对话框上加一个静态控件Static,将其ID改为IDC_STATIC_1,并拉的较长些
4)在CMyDlg类中,加WM_INITDIALOG映射消息,并加下列代码:
CStatic*pWnd=(CStatic*)GetDlgItem(IDC_STATIC_1);
pWnd->
SetWindowText("
欢迎你进入对话框的设计!
"
);
5)也要在应用程序的执行文件(文件名.cpp)前面加:
#include"
MyDlg.h"
4)也要在应用程序的执行文件(文件名.cpp)return前面加:
CMyDlgdlg;
这时才能在Static控件上就显示"
字样。
代码中,CStatic是静态文本控件的MFC类,SetWindowText是CWnd的一个成员函数,用于设置窗口的文本内容。
由于控件类是CWnd的子类(派生类),因此可以使用基类的SetWindowText来改变静态文本控件显示的内容。
GetDlgItem也是CWnd类的一个成员函数,用于获得对话框中控件(参数是控件的ID标识符,这里是IDC_STATIC_1)的窗口指针。
在这里,如果我们象在模式对话框和非模式对话框中,直接在静态控件的属性里写"
,那就简单多了,故这种做法不提倡。
4.2控件的创建和使用方法(177页)
控件是在系统内部定义的能够完成特定功能的控制程序单元。
在应用程序中使用控件不仅简化了编程,还能完成常用的各种功能。
为了更好地发挥控件的作用,用户还必须理解和掌握控件的属性、消息以及创建和使用方法。
4.2.1控件的创建方法
控件的创建方法有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();
//获取对话框的字体
SetFont(font);
//设置控件字体
returnTRUE;
//(程序原有的)
}
(4)编译并运行,结果见书179页图4.26所示。
由于OnInitDialog函数在对话框初始化时被调用,因此将对话框中的一些初始化代码都添加在此函数中。
代码中,Create用来创建一个按钮控件,该函数的第一个参数用来指定该按钮的标题,第二个参数用来指定控件的风格,第三个参数用来指定它在父窗口中的位置和大小,第四个参数用来指定父窗口指针,最后一个参数是指定该控件的标识值。
Create函数的参数中,WS_CHILD、WS_VISIBLE和BS_PUSHBUTTON都是VisualC++6.0系统内部定义的标识符,可以直接引用,由于按钮是作为对话框的一个子窗口来创建的,因此其风格必须有WS_CHILD(子窗口风格)。
WS_CHILD表示按钮是作为对话框的一个子窗口来创建的。
WS_VISIBLE是使控件可见。
BS_PUSHBUTTON表示创建的是按键按钮。
书上178页的“使用控件的编程方式来创建一个按钮”是建一个对话框的应用程序完成的。
过程如下:
1)建一个基于对话框的应用程序,名为:
创建控件
打开VC系统FileNewMFCAppWizard(exe)Location处写路径名Projectname处写文件名:
创建控件OK选中DialogbasedFinish这样就建了一个基于对话框的应用程序。
2)将项目工作区切换到ClassView页面,并展开CMyDlg类右键对准CMyDlg单击鼠标便弹出如书178页图4.24的快捷菜单从快捷菜单中选择AddMemberVariable(添加成员变量),在出现的对话框中定义一个CButton类对象m_btnWnd(在VariableType处写:
CButton在
VariableName处写:
m_btnWnd)(通常以”m_”作为变量的开头,表示”成员”的意思。
如书179页图4.25所示。
3)还是在ClassView页面中,再双击OnInitDialog函数名,在右侧便出现这个函数,你在
它的returnTRUE;
前面加如下代码:
m_btnWnd.Create("
你好"
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(20,20,120,60),this,201);
//创建控件
m_btnWnd.SetFont(font);
4.2.2控件的消息及消息映射
当控件的状态发生改变时,控件旧会向其父窗口发送消息,这个消息称为“通知消息”。
对于每个消息,系统都会用一个MSG结构来记录。
MSG具有下列结构:
TypedefstructtagMSG
{HWNDhwnd;
//接收到消息的窗口句柄注意:
前面的数据类型见//145—146页,窗口句柄
UINTmessage;
//消息,32位无符号整数
WPARAMwParam;
//消息的附加信息,它的含义取决于message
//当做参数传递给窗口过程或回调函数的32位值
LPARAMlParam;
//作为参数传递给窗口过程或回调函数的32位值
DWORDtime;
//消息传送时的时间
//32位无符号整数,段地址和相关的偏移地址
POINTpt;
//消息传送时,光标所在的屏幕坐标。
POINT点是类
}MSG;
对于一般控件来说,其通知消息通常是一条WM_COMMAND消息,这条消息的wParam参数的低位字中含有控件标识符,wParam参数的高位字则为通知代码,lParam参数则是指向控件的句柄。
而对于有些控件,其通知消息通常是一条WM_NOTIFY消息,这条消息的wParam参数是发送通知消息的控件的标识副符,而lParam参数则是指向一个结构指针。
不管是什么控件消息,一般都可以用MFCClassWizard对它们加以映射。
1、映射控件消息
A、建一个基于对话框的应用程序(或用上一个程序),名为:
映射控件消息
B、将项目工作区窗口切换到ResourseView页面,打开Dialog,双击IDD_MY_DIALOG
C、删除上面的一个原有控件“TODO……..”,添加一个按钮控件(Button),保留其默认
属性如书180页图4.27所示。
D、ViewClassWizard保证Classname处是CMyDlg在IDs列表中选择IDC_BUTTON1(这是添加按钮后,系统自动为这个按钮设置的标识符)在Messages框中选择
BN_CLICKED消息单击”AddFunction”按钮或双击BN_CLICKED消息,出现”Add
MemberFunction”对话框,在这里可以输入成员函数的名称,系统默认的函数名为
OnButton1,如书181页图4.28所示。
说明:
(1)不同资源对象(控件、菜单等命令)所产生的消息是不相同的。
例如,按钮
控件IDC_BUTTON1的消息有2个:
BN_CLICKED和BN_DOUBLECLICKED,分别
表示当用户单击或双击该按钮时产生的消息。
(2)一般不需要对对话框中的“OK”(确定)和”Cancel”(取消)进行消息映射,
系统已自动设置了这2个按钮的动作,当用户单击这2个按钮都将自动关闭对话框,而
“OK”按钮动作还使得对话框数据有效。
E、单击“OK”按钮,在MFCClassWizard的”Memberfunctions”列表中将列出新增加的成
员函数,选择此函数,单击“EditCode”按钮(或直接在函数名双击鼠标),开发环境
的文档窗口中将自动打开该函数所在的源代码文件,并定位到该函数的实现代码处。
在
此成员函数中添加下列代码:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
MessageBox("
你按下了\"
Button1\"
按钮!
"
2、映射控件通用消息
上述过程是映射一个控件的某一个消息,事实上也可以通过WM_COMMAND消息的映射来处理一个或多个控件的通用消息,步骤如下:
A、打开“MFCClassWizard”对话框,在“Classname”列表中选择CMyDlg,在IDs列表
中也选择CMyDlg,在Messages框中找到OnCommand双击(或点EditCode),这样在CMyDlg类中就添好了OnCommand消息函数,如书182页图4.29所示。
由于OnCommand函数是一个用于处理WM_COMMAND消息的虚函数,因此这里添加的OnCommand函数事实上是一个在类中实际调用的函数,,可称为“实例函数”。
这样的映射操作,可以称之为“对虚函数OnCommand的重载”。
B、在OnCommand函数中添加下列代码:
OnCommand(WPARAMwParam,LPARAMlParam)
Addyourspecializedcodehereand/orcallthebaseclass
WORDnCode=HIWORD(wParam);
//用于获取32位数值中的高位(146页)
WORDnID=LOWORD(wParam);
//用于获取32位数值中的低位,控件的ID值
if((nID==201)&
&
(nCode==BN_CLICKED))
你好\"
if((nID==IDC_BUTTON1)&
(nCode==BN_CLICKED
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对话框 常用 控件