MFC学习(一)——对话框和Windows标准控件
来源:互联网 发布:重度抑郁症的表现知乎 编辑:程序博客网 时间:2024/06/05 23:04
对话框是Windows应用程序和用户打交道的界面元素,包含各种按钮和各种选项,通过它们可以完成特定命令或任务。学习MFC从对话框的使用开始学习,会让整个学习更加精彩。
1 预备知识
1.1对话框的组成
(1)对话框资源:可以使用对话框编辑器来配置对话框的界面。
(2)对话框类:在MFC程序中可以使用向导帮助用户建立一个与对话框资源相关联的类,通常这个类有CDialog派生。
1.2 对话框的分类
(1)模态(Model)对话框:在对话框关闭之前,用户无法在同一应用程序的其他地方进行工作,如WORD的【打开文件】对话框;不过模态对话框更易于编程,所以先学习这个。
(2)非模态(Modeless)对话框:在对话框仍然保留在屏幕的同时,用户还可以在同一应用程序的其他窗口中工作,如WORD的【查找与替换】对话框。
1.3对话框控件的分类
(1)Windows公用控件:包括编辑控件、按钮、列表框、组合框、滑动条控件等,另外也包括所有者描述的控件。这些应用比较简单,所以先学这个。MFC为了更好的支持Windows公用控件,提供了多种控件类,每一个类封装一种控件,并提供相应的成员函数来管理操作控件。
(2)ActiveX控件:既可以在对话框中使用,也可以在HTML网页中使用。
(3)由MFC提供的其他控件类。
1.4创建对话框
(1)创建对话框资源
可以使用如图1-1所示的对话框编辑器来创建包含不同控件的对话框资源(如图1-2所示)。对话框编辑器会对项目的资源(RC)文件进行更新,使之包含新的对话框资源,并且该项目的Resource.h文件也会被更新以便包含新的#define常量。在对话框编辑器中,可以调整对话框显示的大小和位置,从【工具箱】窗口(如图1-3所示)拖放各种类型的控件到对话框中,用对话框编辑器可以调整控件的位置,测试对话框的外观和行为。(也可以用文本方式来编辑项目的资源文件,这需要掌握资源脚本的编写方法。)
图1-1 对话框编辑器
图1-2 对话框资源
图1-3 “工具箱”窗口
每个放置在对话框资源上的控件都有默认的Tab Order,若想改变默认顺序,可以使用菜单【格式】|【Tab键顺序】或者按快捷键Ctrl+D。当所有控件的Tab顺序显示出来后,就可以使用鼠标单击控件来改变Tab Order。
(2)创建对话框类
在创建了对话框资源后,就可以利用“MFC类向导”来创建从CDialog类派生且连接到对话框资源的对话框类。具体操作详见后面第2节中步骤(2)。
创建完对话框类之后,还要根据具体需要为对话框所含的控件(如编辑框)引入合适类型的变量,实现数据交换和校验。之后还要为对话框类添加数据成员变量,为对话框中的各控件添加消息响应函数,为各种事件处理函数编辑代码,以能够完成指定的工作。
(3)对话框的调用
假设被调用对话框资源的ID为IDD_MY_DIALOG,创建的对话框类名为CMyDialog,则对话框的调用方式(这里只给出模态对话框的调用方式)如下,
CMyDialog dlg;//声明CMyDialog类的对象
Dlg.DoModal();//激活模态对话框
2 操作步骤与实例
本程序的功能是在客户区显示一个可以由用户指定填充颜色的矩形,当菜单【颜色设置】被选中后将调出【颜色】对话框,用户可以确定RGB三原色的值,单击【确定】按钮后即可改变矩形的填充色。
步骤:
(1)启动Visual Studio2010,单击【文件】菜单,选择【新建】->【项目】,弹出对话框(这个对话框就是模态对话框的类型)如图2-1所示。
图2-1
输入名称Li4_1,选择项目存储路径,单击【确定】,弹出如图2-2所示的对话框,
图2-2
如图2-3所示,选择项目的“资源视图”,找到Dialog资源,右击后选中【插入Dialog】命令,打开对话框编辑器。
图2-3
在新的对话框资源上添加3个从【工具箱】窗口选取的静态控件,分别修改其Caption属性为R(0-255)、G(0-255)、B(0-255),再添加3个从【工具箱】窗口选取的编辑框控件,修改其ID属性为IDC_R、IDC_G、IDC_B。可以使用对话框编辑器对各个控件进行布局,设置3个编辑框控件,3个静态控件为同样大小并左对齐,最终完成的对话框界面如图2-4所示。
图2-4
(2)选择对话框资源,右击后选择【添加类】命令,打开【MFC类向导】对话框,如图2-5所示。输入类名CMyColorDialog,单击【完成】,就创建了一个连接到对话框资源的对话框类CMyColorDialog。
图2-5
(3)选择对话框资源,编辑框控件IDC_R,右击后选择【添加变量】命令,打开【添加成员变量向导】对话框,如图2-6所示。
图2-6
【类别】下拉列表中选择Value选项,【变量类型】下拉列表中选择int选项,【变量名】编辑框中输入m_nR,单击【完成】,为控件IDC_R映射int类型成员变量m_nR。
同样,为控件IDC_G、IDC_B分别映射int类型成员变量m_nG、m_nB。
(4)对视图类进行编辑,以激活对话框,并进行绘图。
为了能够以菜单的方式激活对话框,需要对视图类进行编辑。使用项目的“资源视图”,找到IDR_MAINFRAME资源,双击打开菜单编辑器,如图2-7。
图2-7
创建菜单项【设置】|【颜色设置】,(步骤,在【帮助】菜单后面的文本提示【请在此键入】处右击,选择【新插入】,然后输入“设置”,“设置”下面输入“颜色设置”,然后选中这个菜单拖到【帮助】菜单前。)将其ID属性设置为ID_COLOR,如图2-8所示。
图2-8
(5)在【类视图】窗口中选择视图类CLi4_1View,如图2-9左图所示。单击【属性】窗口中的【事件】按钮,选择ID_COLOR的COMMAND,添加函数OnColor(),如图2-9右图。
在程序运行的时候,单击【设置】|【颜色设置】菜单项即会调用OnColor()函数,其代码如下:(为了在视图类中使用对话框类,需要包含该类的头文件,在CLi4_1View.h中加入语句:#include "MyColorDialog.h",在视图类中添加对话框成员,(双击CLi4_1View)代码如下:
//操作
public:
CMyColorDialog Dlg; //声明CMyDialog类的对象)
void CLi4_1View::OnColor()
{
Dlg.DoModal();//激活模态对话框
Invalidate();//调用函数OnDraw()重新绘图
}
图2-9
(6)为了在设置颜色后使客户区的矩形能按设定的颜色显示,还须编辑视图类中的函数OnDraw(),其代码如下:
void CLi4_1View::OnDraw(CDC* pDC)
{
CLi4_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(rect);//取得客户区矩形
CBrush brush,*poldbrush;
//根据对话框设定的颜色值设定brush的颜色
brush.CreateSolidBrush(RGB(Dlg.m_nR, Dlg.m_nG, Dlg.m_nB));
//将brush选入GDI环境,并保存原来的画刷句柄
Poldbrush = pDC->SelectObject(&brush);
//在客户区中画矩形
pDC ->Rectangle(100, 100, 200, 300);
//恢复原来的画刷
pDC->SelectObject(poldbrush);
}
程序的运行结果:
- MFC学习(一)——对话框和Windows标准控件
- MFC学习笔记——CDialog(创建对话框类和添加控件变量)
- MFC对话框和控件
- MFC对话框和控件
- MFC学习笔记——CDialog(设置对话框控件的Tab顺序)
- MFC---对话框(一)对话框文本的获取和设置
- VS2010&MFC对话框编程(1)——对话框控件简介
- MFC学习笔记之五—————对话框编程及控件初步操作
- MFC学习笔记之五—————对话框编程及控件的操作
- MFC控件和对话框一起变小变大
- MFC 动态创建对话框和控件
- MFC 对话框控件和变量类型
- MFC对话框杂记(一)
- MFC高级控件学习一
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
- VS2010/MFC编程入门之七(对话框:创建对话框类和添加控件变量)
- VS2010/MFC编程入门之七(对话框:创建对话框类和添加控件变量)
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
- 设计模式(22)——解释器模式
- poj 2586 greedy
- HYSBZ 1208 宠物收养所(Splay)
- 图文详解springMVC demo的配置及运行过程
- 《软件架构师应该知道的97件事》 读书笔记
- MFC学习(一)——对话框和Windows标准控件
- Around the World in Eighty Days 19/201
- 设计模式(23)——访问者模式与双分派
- poj 2709 Painter
- POJ 3352 Road Construction / 边双连通分量
- HDU Eddy's digital Roots
- 《深度探索C++对象模型》--2 构造函数语意学
- 设计模式23种小结
- Linux学习路线之linux的amr开发学习方法