使用属性对话框属性对话框不同于普通对话框的是它能同时提供多个选项页,而每页都可以由资源编辑器以编辑对话框的方式进行编辑,这样给界面开发带来了方便。同时使用上也遵守普通对话框的规则,所以学习起来很方便。属性对话框由两部分构成:多个属性页(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();
}
分享到:
相关推荐
对话框(Dialog)是MFC应用程序中用于与用户交互的窗口,通常包含各种控件,如按钮、文本框和树控件等。本教程将重点讲解如何在对话框中操作MFC树控件,并解决子节点字符串重复时添加不同对话框的问题。 1. **MFC树...
在Microsoft Foundation Class (MFC)库中,属性页对话框是一种常见的用户界面元素,它允许用户以多标签的形式查看和编辑一系列相关设置。MFC属性页对话框通常由多个属性页(每个页面代表一个特定的设置类别)和一个...
首先,我们需要理解MFC中的CWnd类,它是所有窗口类的基类,包括对话框和非对话框控件。在MFC中,每个控件都是一个CWnd对象或者其派生类的对象。当我们想要改变控件的颜色时,通常需要重写OnPaint()消息处理函数,...
MFC(Microsoft Foundation Classes)是一个功能强大且广泛使用的应用程序框架,在视图控件中嵌入对话框是常见的需求。下面将详细介绍如何将一个对话框嵌入到视图中,实现自定义的用户界面。 一、资源管理器中的...
**MFC 一般属性页对话框** MFC(Microsoft Foundation Classes)是一套C++类库,用于构建Windows应用程序,特别是图形用户界面(GUI)应用。在Visual Studio 2017中,MFC提供了一种方便的方式来实现属性页对话框,...
对话框控件的使用涉及到创建控件对象、在对话框资源中设置控件属性,以及在类中定义控件的事件处理函数。 **文件vc++_mfc.chm** 此文件名表明它是一个帮助文件,可能包含了关于VC++和MFC的详细信息,特别是关于...
此外,还可以使用MFC的AFX_EXT_CLASS宏创建扩展对话框模板,以方便在属性页中使用自定义控件和复杂的用户界面元素。这可以通过继承CPropertyPage并重载`Create`函数来实现。 总之,MFC对话框实现属性页是一个涉及...
MFC 属性表对话框的运行机制 MFC 属性表对话框是 VC++ 中的一种常用的对话框类型,它的运行机制比较复杂,本文将对其进行详细的介绍。 首先,MFC 属性表对话框的初始化包括框架对话框的初始化和页的初始化。页的...
在文档“MFC函数----对话框.doc”中,可能包含了关于如何创建、使用和管理MFC对话框的更详细信息,包括控件的使用、事件处理、对话框的动态创建等。深入学习这些内容,有助于开发者更好地构建具有丰富交互功能的...
为了保护用户隐私,密码输入通常会用星号(*)或圆点(·)隐藏实际字符,这在MFC中可以通过设置EDIT控件的属性来实现。此外,为了安全,密码不应明文存储,而是应该在获取后立即加密,并在比较时解密。 **事件处理** ...
MFC控件的学习是掌握MFC开发的关键之一。通过了解不同类型控件的特点和使用方法,开发者可以更高效地构建用户界面,并实现丰富的交互功能。以上介绍的只是MFC控件的一小部分,更深入的学习还需要参考官方文档和其他...
属性对话框通常由一系列控件组成,如文本框、复选框和组合框,用于显示和修改对象的各种特性。通过使用对话框模板,开发人员可以快速构建定制化的属性编辑界面,而无需从头编写大量的UI代码。 1. **C++ MFC库**:...
4. **控件属性设置**:在代码中可以使用SetWindowText、SetCheck等方法改变控件的属性。 5. **获取控件值**:在需要获取控件值时,使用GetDlgItemText、GetCheck等函数。 此外,MFC中的菜单(Menu)也是用户界面的...
1. 设置和获取控件属性:使用各种SetXXX()和GetXXX()函数,如SetWindowText()设置文本框内容,GetDlgItemInt()获取编辑框的整数值。 2. 动态创建和销毁控件:使用Create()函数动态创建控件,DestroyWindow()函数销毁...
MFC Windows 程序设计之多控件属性对话框,适合初学MFC的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学MFC Windows 程序设计的小伙伴们,你们的成长是我最大的幸福
6. **对话框的属性和状态** 对话框的可见性、位置、大小等可以通过`ShowWindow()`, `MoveWindow()`, `SetWindowPos()`等函数来控制。 7. **对话框的返回值** 模态对话框的`DoModal()`函数会返回一个整数值,如`...
3. **控件属性**: - ID:每个控件都有唯一的ID,用于识别和处理控件。 - Text:控件显示的文本内容,如按钮上的文字或静态文本。 - Font:字体设置,包括字体类型、大小、颜色等。 - Enabled:控制控件是否可用...
CLayout提供了对控件自动布局的支持,只需设置控件的布局属性,如居中、填充、间距等,它就能在对话框大小变化时自动调整控件的位置和大小。 在实际开发中,结合《VC用鼠标调整对话框大小》这样的资源,我们可以...
标题“动手学MFC之六——不止一个对话框例子程序”指出,我们将探讨如何在MFC应用中使用多个对话框。对话框在Windows编程中是非常常见的,它们通常用于收集用户输入或显示信息。在MFC中,对话框通过`CDialog`类及其...
在Microsoft Foundation Class (MFC)库中,动态创建窗口与对话框是常见的编程任务,尤其在需要在程序运行时根据需要创建用户界面元素时。在Visual Studio 2017中,MFC提供了丰富的功能来简化这个过程。下面将详细...