`
isiqi
  • 浏览: 16027532 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MFC控件篇之属性对话框

阅读更多
使用属性对话框

属性对话框不同于普通对话框的是它能同时提供多个选项页,而每页都可以由资源编辑器以编辑对话框的方式进行编辑,这样给界面开发带来了方便。同时使用上也遵守普通对话框的规则,所以学习起来很方便。属性对话框由两部分构成:多个属性页(CPropertyPage)和属性对话框(CPropertySheet)。

首先需要编辑属性页,在资源编辑器中选择插入,并且选择属性对话框后就可以插入一个属性页,或者选择插入一个对话框,然后将其属性中的Style设置为Child,Border设置为Thin也可以,然后根据这个对话框资源生成一个新类,在选择基类时选择CPropertyPage,ClassWizard会自动生成相关的代码。

而对于CPropertySheet也需要生成新类,并且将所有需要加入的属性页对象都作为成员变量。属性对话框也分为有模式和无模式两种,有模式属性对话框使用DoModal()创建,无模式属性对话框使用Create()创建。下面的代码演示了如何创建属性对话框并添加属性页:

//修改CPropertySheet派生类的构造函数为如下形式
CSheet::CSheet()
:CPropertySheet("test sheet", NULL, 0)
{
m_page1.Construct(IDD_PAGE_1);
m_page2.Construct(IDD_PAGE_2);
AddPage(&m_page1);
AddPage(&m_page2);
}
//创建有模式属性对话框
void CMy56_s1Dlg::OnMod()
{
CSheet sheet;
sheet.DoModal();
}
//创建无模式属性对话框
void CMy56_s1Dlg::OnUnm()
{
CSheet *sheet=new CSheet;
sheet->Create();
}


对于属性对话框可以使用下面的一些成员函数:

CPropertyPage* CPropertySheet::GetActivePage( )得到当前活动页的指针。
BOOL CPropertySheet::SetActivePage( int nPage )用于设置当前活动页。
int CPropertySheet::GetPageCount()用于得到当前页总数。
void CPropertySheet::RemovePage( int nPage )用于删除一页。
而对于属性页来将主要通过重载一些函数来达到控制的目的:
void CPropertyPage::OnOK() 在属性对话框上按下“确定”按钮后被调用
void CPropertyPage::OnCancel() 在属性对话框上按下“取消”按钮后被调用
void CPropertyPage::OnApply() 在属性对话框上按下“应用”按钮后被调用
void CPropertyPage::SetModified( BOOL bChanged = TRUE ) 设置当前页面上的数据被修改标记,这个调用可以使“应用”按钮为允许状态。
此外利用属性对话框你可以生成向导对话框,向导对话框同样拥有多个属性页,但同时只有一页被显示,而且对话框上显示的按钮为“上一步”,“下一步”/“完成”,向导对话框会按照你添加页面的顺序依次显示所有的页。在显示属性对话框前你需要调用void CPropertySheet::SetWizardMode()。使用向导对话框时需要对属性页的BOOL CPropertyPage::OnSetActive( )进行重载,并在其中调用void CPropertySheet::SetWizardButtons( DWORD dwFlags )来设置向导对话框上显示的按钮。dwFlags的取值可为以下值的“或”操作:
PSWIZB_BACK 显示“上一步”按钮
PSWIZB_NEXT 显示“下一步”按钮
PSWIZB_FINISH 显示“完成”按钮
PSWIZB_DISABLEDFINISH 显示禁止的“完成”按钮
void CPropertySheet::SetWizardButtons( DWORD dwFlags )也可以在其他地方调用,比如说在显示最后一页时先显示禁止的“完成”按钮,在完成某些操作后再显示允许的“完成”按钮。

在使用向导对话框时可以通过重载一些函数来达到控制的目的:

void CPropertyPage::OnWizardBack() 按下了“上一步”按钮。返回0表示有系统决定需要显示的页面,-1表示禁止页面转换,如果希望显示一个特定的页面需要返回该页面的ID号。
void CPropertyPage::OnOnWizardNext() 按下了“下一步”按钮。返回值含义与void CPropertyPage::OnWizardBack()相同。
void CPropertyPage::OnWizardFinish() 按下了“完成”按钮。返回FALSE表示不允许继续,否则返回TRUE向导对话框将被结束。
在向导对话框的DoModal()返回值为ID_WIZFINISH或IDCANCEL。下面的代码演示了如何创建并使用向导对话框:
//创建有模式向导对话框
void CMy56_s1Dlg::OnWiz()
{
CSheet sheet;
sheet.SetWizardMode();
int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL
}
//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮
BOOL CPage1::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButt
ons(PSWIZB_BACK|PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
BOOL CPage2::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButt
ons(PSWIZB_BACK|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
分享到:
评论

相关推荐

    MFC Windows 程序设计之多控件属性对话框

    MFC Windows 程序设计之多控件属性对话框,适合初学MFC的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学MFC Windows 程序设计的小伙伴们,你们的成长是我最大的幸福

    mfc对话框实现属性页

    当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案

    MFC 编程入门教程55篇完整版.pdf

    VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC 编程入门...

    VS2010-MFC编程入门

    VS2010-MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)鸡啄米 VS2010-MFC编程入门之七(对话框:为对话框添加控件)-软件开发-鸡啄米 VS2010-MFC编程入门之八(对话框:创建对话框类和添加控件变量) ...

    鸡啄米:VS2010-MFC编程入门教程(1-55).docx

    VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC编程入门之七(对话框:为对话框添加控件) VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门...

    VC++6[1].0入门【第七章_windows标准控件】.doc

    每个控件都有一个属性集,对于静态创建的控件,可以在对话框模板中,打开控件的属性对话框直接设置控件的初始属性。在程序设计过程中,可以通过控件类对象调用方法设置控件的属性。 3. 控件消息类别 表7-1中所列出...

    对话框中属性框控件

    将框架中常见的属性框控件应用到对话框中,编程环境:VS2003 MFC

    可变大小对话框 好MFC

    可变大小对话框VC6.0 MFC 对话框可以变更大小,只接通过,可用

    MFC 窗口中控件随窗口放大相应改变大小

    对话框中控件随窗口放大(缩小)进行相应的改变。本例中的对话框只能最大化或还原,你可在对话框的属性中修改Border为Resizing,即可用鼠标拖动改变对话框大小。

    VS2015对MFC中列表框的使用

    用VS2015实现mfc中基本控件列表框的使用,该程序功能可以进行对列表框内容的增加和减少,并进行相应的判断。

    对话框高级编程---公共控件之二(标签控件和属性表)

    属性页实现选项卡的实例 博文链接:https://fpwjp.iteye.com/blog/390765

    MFC 窗口中控件

    对话框中控件随窗口放大(缩小)进行相应的改变。本例中的对话框只能最大化或还原,你可在对话框的属性中修改Border为Resizing,即可用鼠标拖动改变对话框大小。

    VC++ 对话框的使用

    对话框上必须有相应的控件,通过控件,对话框可以收集用户的信息或向用户提供信息显示。  对话框是一种非常有用的资源,它的主要功能有两个,一是发送消息,二是接收输入;对话框分为两类,一是模态对话框,二是非...

    深入解析MFC

    MFC控件类 结语 第7章 MFC的文档/视图结构 为什么要用文档/视图 其他原因 旧的方法 体系结构 文档/视图结构内幕 文档舰图内幕再览 结语 第8章 高级文档舰图结构内幕 CMirrorFile CView打印 CView对打印预览支持的...

    Visual C++MFC编程实例

    9.5 例42 在无模式对话框的控件间 切换焦点 172 9.6 例43 对话框中的动画 173 9.7 例44 消息框 174 9.8 例45 对话条 176 第10章 控件窗口 182 10.1 例46 在任意位置创建一个控 件窗口 182 10.2 例47 用子分类定制...

    VC中自动改变控件位置和大小的对话框类

    从这个类继承的对话框类,只要在OnInitDialog()里对控件做一些简单的设置,对话框上的控件就会随着对话框大小的改变而改变自己的位置和大小(当然,别忘了把对话框的Border属性改为Resizing)。

    tabctrl 控件

    这是一个关于mfc对话框控件中属性选型卡tabctrl控件用法的程序,为mfc对话框控件初学者提供了一个较好的学习控件用法的学习资料。

    在TABControl和ProperPage子对话框中实现滚动条

    为MFC对话框中选项卡控件或属性页子对话框添加滚动条。需要提醒的是:在对话框中按ALT键拖放控件可实现控件在对话框外的摆放。

    MFC中动态创建控件以及事件响应实现方法

     放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的...

    [MFC.Windows程序设计(第2版)修订版].(Programming.Windows.with.MFC,.2nd.Edition)

     第8章 对话框和属性表  第Ⅱ部分 文档/视图体系结构  第9章 文档、视图和单文档界面  第10章 滚动视图、HTML视图以及其他视图类型  第11章 多文档和多视图  第12章 工具栏、状态栏和组合栏  第13章 打印和...

Global site tag (gtag.js) - Google Analytics