MFC程序员WTL指南(9)属性页与向导
2008-01-19 20:26:45 来源:WEB开发网核心提示:这就是向导的效果:添加更多的属性页,使用DDV为了使这个向导能够有点用处,MFC程序员WTL指南(9)属性页与向导(6),我们要为其添加一个设置视图背景颜色的页面,这个页面还将有一个checkbox演示如何处理DDV验证失败并阻止向导进行到下一页,然后检查m_bFailDDV的值,如果是TRUE就表示checkbox处
这就是向导的效果:
添加更多的属性页,使用DDV
为了使这个向导能够有点用处,我们要为其添加一个设置视图背景颜色的页面。这个页面还将有一个checkbox演示如何处理DDV验证失败并阻止向导进行到下一页。下面就是新的页面,ID是IDD_WIZARD_BKCOLOR:
这个类的实现代码在CWizBkColorPage类中,下面是相关的部分代码
class CWizBkColorPage :
public CPropertyPageImpl<CWizBkColorPage>,
public CWinDataExchange<CWizBkColorPage>
{
public:
// some stuff removed for brevity...
BEGIN_DDX_MAP(CWizBkColorPage)
DDX_RADIO(IDC_BLUE, m_nColor)
DDX_CHECK(IDC_FAIL_DDV, m_bFailDDV)
END_DDX_MAP()
// Notification handlers
int OnSetActive();
BOOL OnKillActive();
// DDX vars
int m_nColor;
protected:
int m_bFailDDV;
};
OnSetActive()的工作和前面的介绍页面相同,它使“上一步”和“下一步”按钮可用。OnKillActive()是个新的处理函数,它触发DDV,然后检查m_bFailDDV的值,如果是TRUE就表示checkbox处于选中状态,OnKillActive()将阻止向导进行到下一页。
int CWizBkColorPage::OnSetActive()
{
SetWizardButtons ( PSWIZB_BACK | PSWIZB_NEXT );
return 0;
}
int CWizBkColorPage::OnKillActive()
{
if ( !DoDataExchange(true) )
return TRUE; // prevent deactivation
if ( m_bFailDDV )
{
MessageBox (
_T("Error box checked, wizard will stay on this page."),
_T("PSheets"), MB_ICONERROR );
return TRUE; // prevent deactivation
}
return FALSE; // allow deactivation
}
更多精彩
赞助商链接