MFC属性页对话框

属性页对话框

分类

标签式和向导式

相关类

CPropertyPage-父类是CDialog类,称为属性页或页面对话框。

CPropertySheet-父类是CWnd,称为属性表单。

一个完整的属性页对话框由一个属性表单+多个属性页组成。属性页嵌套在属性表单内。

标签式属性页的创建步骤:

1 插入属性页对话框资源,选中对话框资源ID修改语言为Chinese(P.R.C), 选中资源视图的右边的对话框右键选择属性设置为宋体,9号字体,双击资源,生成相应的类,注意父类选择CPropertyPage类。

2 右击工程,选择添加新的类,父类是CPropertySheet类。

3 在表单类中添加属性页对象。在构造函数中,

CPropertySheet::AddPage

4 创建和显示属性页

CPropertySheet::DoModal()

5 当控件的值发生改变时,将应用按钮设置为可用

CPropertyPage::SetModified(TRUE);

6 消息处理(通过在页面类中添加虚函数的方式实现)

CPropertyPage::OnApply

CPropertyPage::OnOK

CPropertyPage::OnCancel

新建一个MFC当文档应用程序,为菜单添加一个菜单项,在该菜单项的点击处理函数中弹出我们的属性页对话框。

为了演示效果,在视图类的OnDraw函数中创建画笔,然后绘制一个图形,画笔的线宽和颜色由其成员变量m_nWidth和m_color决定,这里正是在属性页对话框中设置线宽和颜色然后作用到上面绘制的图形上。

为视图类添加两个成员变量:

int         m_nWitdh;// 线宽

COLORERF  m_color;  //  颜色

并在视图类的构造函数中初始化

m_nWidth = 1;

m_color = RGB (0, 0, 0);

视图的OnDraw添加绘图代码如下:

void CMFCLabelView::OnDraw(CDC* pDC)
{
	CMFCLabelDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	CPen pen;
	pen.CreatePen (PS_SOLID, m_nWidth, m_color);
	CPen *pOldPen = pDC->SelectObject (&pen);
	pDC->Ellipse (100, 100, 400, 400);
	pDC->SelectObject (pOldPen);
	pen.DeleteObject ();
}

添加菜单项

插入对话框资源,注意选择PROPPAGE类型的对话框资源

选中对话框资源,右键更改语言为P.R.C

然后在资源视图右边窗口选中对话框资源右键属性修改字体为宋体9号:

复制一个刚才我们新建的并且调整好语言和字体的对话框

注意:其中一个为线宽设置对话框,给它添加一个编辑框控件用以输入数值

另外一个为颜色设置对话框,给它添加一个按钮,点击按钮弹出颜色对话框

双击他们通过类向导生成相应的类,注意选择父类为CpropertyPage

这里分别命名为:CPage1和CPage2

Ctrl+W为线宽设置对话框的编辑框控件绑定一个int类型的值变量:m_nLineWidth并设置其范围为: 1 –20,并在其构造函数中初始化为1。

在工程上右键选择New Class 注意选择父类为CpropertySheet, 这里类名我设置为:ClabelSheet,然后为该类添加两个成员变量:

CPage1 m_page1;

CPage2 m_page2; 

然后在ClabelSheet的两个构造函数中都添加属性页(这样无论调用哪个都可以正确添加):

AddPage (&m_page1);

AddPage (&m_page2);

注意包含:Page1.h 和Page2.h头文件

Ctrl+W为视图类添加菜单的命令消息响应函数,添加如下创建标签式属性页的代码:

注意包含:LabelSheet.h头文件

为了使当用户输入数据时让属性页对话框上的应用按钮变为可用状态,为线宽设置对话库类CPage1的编辑框控件添加EN_CHANGE消息响应函数,当编辑框内容一旦改变将触发该消息,

消息响应函数如下:

void CPage1::OnChangeEditLinewidth()
{
	// 设置应用按钮为可用状态
	SetModified (TRUE);
}

为了在用户点击应用按钮时把用户的设置反应在视图类的窗口绘图上,我们需要响应应用按钮的消息,然而我们无法直接通过双击应用按钮位它添加消息,正确的做法是通过添加虚函数的方式,此外还有确定, 下一步,等一切属性页对话框上的按钮事件都是虚函数。

那么这里我给CPage1添加一个虚函数OnApply来响应”应用”按钮事件

并添加如下代码来影响视图窗口图形的绘制:

BOOL CPage1::OnApply()
{
	// TODO: Add your specialized code here and/or call the base class
	// 从控件接收数据到变量
	UpdateData (TRUE);
	// 获取视图类对象指针
	CMFCLabelView *pView = (CMFCLabelView*)(((CFrameWnd*)AfxGetMainWnd ())->GetActiveView ());
	// 改变视图类的线宽
	pView->m_nWidth = m_nLineWidth;
	// 使视图窗口重绘
	pView->Invalidate ();
	return CPropertyPage::OnApply();
}

这个时候编译会包一些错误发现是一些头文件包含问题

首先在Page1中包含MFCLabelView.h

然后在MFCLabelView中包含MFCLabelDoc.h

再编译就Ok了,设置线宽后点应用按钮在视图窗口中可以看到效果。

MFC属性页对话框

时间: 2024-10-07 11:42:30

MFC属性页对话框的相关文章

(转载)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将<VC++/MFC编程入门>改为<VS2010/MFC编程入门>. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面.另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击"Next&

C++MFC编程笔记day10 MF界面控件的使用2、属性页对话框、MFC线程

一 树型控件 1 相关类 CTreeCtrl-父类是CWnd,控件类. CTreeView-父类是CCtrlView,视图类.CTreeView=CView+CTreeCtrl CTreeView::GetTreeCtrl 2 CTreeCtrl的使用 对比CListCtrl:列表控件的每个数据项之间是平等关系,通过数据项 的索引值得到数据项的信息.树控件每个数据项称之为节点.节点之间 的关系包括父子关系和兄弟关系.通常通过节点句柄得到某个节点. 通常用来表示层次关系的数据. 2.1 设置控件的

(转载)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

属性页对话框包括向导对话框和一般属性页对话框两类,上一节鸡啄米讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.鸡啄米将上一节中的向导对话框进行少量修改,使其成为一般属性页对话框. 一般属性页对话框的创建步骤: 1.创建属性页对话框资源 属性页对话框资源的创建方法同向导对话框是一样的,上一讲中的对话框资源不需进行任何修改. 2.创建属性页类 属性页类的创建和向导对话框的属性页类也基本一样,只是一般属性页对话

MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

属性页对话框包括向导对话框和一般属性页对话框两类,上一节讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.将上一节中的向导对话框进行少量修改,使其成为一般属性页对话框. 一般属性页对话框的创建步骤: 1.创建属性页对话框资源 属性页对话框资源的创建方法同向导对话框是一样的,上一讲中的对话框资源不需要进行任何修改. 2.创建属性页类 属性页类的创建和向导对话框的属性页类也基本一样,只是一般属性页对话框中不需要

VS2010/MFC对话框:一般属性页对话框的创建及显示

一般属性页对话框的创建及显示 本节将介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.鸡啄米将上一节中的向导对话框进行少量修改,使其成为一般属性页对话框. 一般属性页对话框的创建步骤: 1.创建属性页对话框资源 属性页对话框资源的创建方法同向导对话框是一样的,上一讲中的对话框资源不需进行任何修改. 2.创建属性页类 属性页类的创建和向导对话框的属性页类也基本一样,只是一般属性页对话框中不需要“下一步”和“完成”等按钮,所以上一讲中属性页类的OnS

属性页对话框

1.分类 标签式和向导式 2.相关类 CPropertyPage -属性页,其实就是一个对话框页面,父类是CDialog类 CPropertySheet -属性表单,父类是CWnd类 一个完整的属性页对话框由一个属性表单+多个属性页组成 属性页资源与普通对话框资源的区别: 属性页: 对话框: 3.标签式属性页 3.1插入属性页对话框资源,修改语言和字体,双击资源,生成相应的类,注意父类选择CPropertyPage类. 创建一个单文档视图的MFC工程:Prop 插入3个属性页: 注意:①这里插入

VS2010-MFC(对话框:属性页对话框及相关类的介绍)

转自:http://www.jizhuomi.com/software/164.html 一 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面.另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击"Next"等按钮来切换页面. 属性页对话框就是包含一般属性页对话框和向导对话框两类.它将多个对话框集成于一身,通过标签或按钮来切换页面. 二 属性页对话框相关类       我们使用属性页对话框时

属性页对话框 去掉下面的一排按钮

属性页的模式有2种 <span style="font-size:18px;"></span><pre name="code" class="cpp"> //向导模式 ID_WIZNEXT // Next ID_WIZBACK // Back ID_WIZFINISH // Finsh IDCANCEL // Cancel //普通模式 IDOK // OK IDCANCEL //Cancel ID_APPLY

MFC之向导页和属性页(CPropertyPage/CPropertySheet)

(Mark) : 类CPropertyPage的对象表示一张属性表的各页,或者说是被看作是标签对话框 - 摘自百度百科 (Mark) :CPropertyPage 是继承自CWnd的子类. (Mark) :以下是类CPropertyPage的一些重要的类成员简介: 1)构造函数 这里讲三个CProperty类的构造函数,函数原型为: CPropertyPage( ); explicit CPropertyPage(                UINT nIDTemplate,