MFC如何在CPropertySheet根据radio button实现不同页面的显示

flyseasu 2014-07-03 10:27:59
我想实现的功能是这样的:
定义一个继承自CPropertySheet的类,添加CPropertyPage界面,该界面上有2个radio button,我可以根据用户选择的radio button,而使得用户在点击下一步的时候弹出不同的page,请问有办法实现吗?

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
最终结贴,其实真正的做法很简单。在第一个属性页里加入两个radio button,然后在OnWizardNext()函数里对radio button进行判断,return 相应属性页的资源ID就可以。
OnWizardNext()示例:
LRESULT XXX::OnWizardNext()
{
// TODO: 在此添加专用代码和/或调用基类
UpdateData(TRUE);

if (m_nRadio == 0)
return IDD_PROPPAGE0;

if (m_nRadio == 1)
return IDD_PROPPAGE1;
}

虽然白白走了很多冤枉路,但是也学到了不少东西,同时深深的怀念Google。
...全文
259 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flySea_csdn 2014-07-28
  • 打赏
  • 举报
回复
在第一个属性页里加入两个radio button,然后在OnWizardNext()函数里对radio button进行判断,return 相应属性页的资源ID就可以。
LRESULT XXX::OnWizardNext()
{
    // TODO: 在此添加专用代码和/或调用基类   
    UpdateData(TRUE);
     
    if (m_nRadio == 0)
        return IDD_PROPPAGE0;
     
    if (m_nRadio == 1)
        return IDD_PROPPAGE1;
}
flyseasu 2014-07-04
  • 打赏
  • 举报
回复
把判别界面定义为继承自CPropertyPage的类,然后在CPropertySheet里AddPage是不可以的,因为后续页面跳转的时候,CPropertySheet已经初始化完毕,无法修改。
解决方法:
将判别界面定义为dialog,并定义一个继承自CPropertySheet的类CMyPropertySheet ,为构造函数增加一个变量,用于判断用户的选择,决定如何初始化:
CMyPropertySheet::CMyPropertySheet(int  pData, UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
this->SetWizardMode();

switch (pData)
{
case 0:
this->AddPage(&m_Page0);
this->AddPage(&m_Page1_0);
break;
case 1:
this->AddPage(&m_Page0);
this->AddPage(&m_Page1_1);
break;
default:
break;
}
}

两个构造函数都要修改,m_Page0对于两个判别界面是一样的,只有m_Page1_0和m_Page1_1不同,所以在:OnInitDialog()里面加入:this->SetActivePage(&m_Page0);
其他消息响应函数自行加上,其中,m_Page0要有上一步按钮,以便跳转回判别界面

在需要调用判别界面的类里设置计时器,定义成员变量CMyPropertySheet *m_sheet;
在OnTimer里面先KillTimer,然后隐藏属性页,获取属性页的句柄,如果句柄不为NULL,则delete m_sheet;
根据用户点击的radio button新建m_sheet :m_sheet=new CMyPropertySheet(0,"向导页面");构造函数的第一个参数即为分类条件。
flyseasu 2014-07-04
  • 打赏
  • 举报
回复
还是我自己来结贴,中午发现点击判别条件对话框的“取消”按钮会出错,后来我重载了取消按钮的消息响应函数,取得CPropertyPage属性页的句柄,如果发现句柄不为NULL,则向CPropertySheet发送WM_CLOSE消息,同时重载CPropertySheet的OnClose()进行响应,最终实现了像属性表那样的切换效果。如果有大神能够提出更好的办法,楼主会万分感激。
flyseasu 2014-07-04
  • 打赏
  • 举报
回复
这种做法还是有问题,期待高手来给个正确的做法

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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