CpropertySheet CpropertyPage根据用户选择显示不同的属性页

gyg405 2013-03-10 01:33:43
如题,我定义了一个CpropertySheet的派生类CMySheet,并添加了几个属性页如Cpage1,Cpage2,Cpage3等。Cpage1上有一组单选按钮,我需要根据单选按钮的值,从而确定是显示Cpage2还是显示Cpage3.如何实现? 麻烦具体点,谢过先。
...全文
58 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2013-03-10
  • 打赏
  • 举报
回复
nPage Index of the page to set. It must be between 0 and one less than the number of pages in the property sheet, inclusive.
gyg405 2013-03-10
  • 打赏
  • 举报
回复
看了别的帖子,调用CPropertySheet::SetActivePage()函数来选择激活标签页。我现在标签页的索引是按照:Cpage1,Cpage2,Cpage3 顺序排列的。在Cpage1中重载了OnWizardNext函数,就是在单击下一步按钮时,会调用这个函数,函数代码如下:其中m_RadiozButton关联了单选按钮。 LRESULT CFirstPage::OnWizardNext() { // TODO: 在此添加专用代码和/或调用基类 UpdateData(); CPropertySheet* pParent = (CPropertySheet*) GetParent(); if(m_RadiozButton==0) { if(pParent->GetSafeHwnd()) { pParent->SetActivePage(0); } } if (m_RadiozButton==1) { if(pParent->GetSafeHwnd()) { pParent->SetActivePage(2); } } return 0; //return CPropertyPage::OnWizardNext(); } 这样执行的结果是对的。在打开第一个属性页后,可以按照单选钮的值,进入第二或者第三页。 只是SetActivePage()里的参数,我是蒙出来的。不知道该怎么解释。麻烦知道的解释下。因为后面还要用到这个函数。
oyljerry 2013-03-10
  • 打赏
  • 举报
回复
根据按钮,把信息传递给CPropertySheet,然后来控制显示哪个CPropertyPage
向导对话框 向导对话框实际上是一种特殊的属性表,和属性不同的是,它能使用按钮来完成从一到另一的移动,而不是使用选项卡。我们用MFC AppWizard(exe)来建立新的程序时,就是用向导对话框完成的整 个过程,图3.7.1就是这个过程的 第一步,点击Next到下一步。 由于向导是一种特殊的属性表, 因此与其对应的MFC类也是属性 表类CpropertySheet属性类 CpropertyPage,在向导程序中,属 性表的创建方法没有改变,只是在 调用DoModel函数之前应调用 SetWizardMode(设置向导模式)函数, 图3.7.1 建立新项目过程的第一步 将属性表的操作方式设置为向导模式。 在向导模式下,每一个属性都有Back、Next、Cancel按钮,由于每次显示向导的特定时,MFC自动调用OnSetActive()(设置活动函数)函数,因此我们可以重载OnSetActive函数,在此函数中利用SetWizardButton(设置属性按钮显示方式)设置希望出现的按钮,在向导程序的最后一,可以通过用SetFinishText(设置Finish命令按钮中的文本)设置Finish按钮所显示的文字,同时隐藏”上一步(Back)”按钮和”下一步(Next)”按钮。 例3.28 创建向导对话框 (1)创建一个基于对话框的应用程序,名为:向导对话框 (2)创建属性对话框和属性对话框类并添加相应的消息映射函数 1)Insert ResourceDialogIDD_PROPPAGE_MEDIUMNew,创建了第一个对话框,将其ID改为:IDD_STEP1,将其Language属性设置为Chinese[P.R.C]。并为该对话框建类,类名为:Cpage1,基类为:CpropertyPage。 2)删除对话框上的原有控件,在控件工具栏中拖到对话框一个静态文本,静态文本的属性Caption处写:第一个对话框,再拖过一个静态图片控件,将一个.bmp图形Import(导入)到程序中,再把这个图形加到这个图片控件上,如图3.7.2所示。 利用ClassWizard为类Cpage1增加消息映射函数OnSetActive,在此函数中激活Next按钮,代码如下: BOOL Cpage1::OnSetActive() { CPropertySheet *pSheet=(CPropertySheet *)GetParent(); ASSERT_KINDOF(CPropertySheet,pSheet); pSheet->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive();

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧