MFC程序员的WTL指南(9)属性页与向导
2006-07-22 22:03:05 来源:WEB开发网核心提示: 有一个名为IDD的公有成员将对话框于资源联系起来, 消息映射链和CDialogImpl相似,MFC程序员的WTL指南(9)属性页与向导(7), 消息映射链将消息链入CPropertyPageImpl,从而使我们能够处理与属性表相关的通知消息,使用一个公有变量与CBackgroundOpts
- 有一个名为IDD的公有成员将对话框于资源联系起来。
- 消息映射链和CDialogImpl相似。
- 消息映射链将消息链入CPropertyPageImpl,从而使我们能够处理与属性表相关的通知消息。
- 有一个OnApply()处理函数在单击属性表中的OK按钮时保存用户的选择。
OnApply() 非常简单,它调用 DoDataExchange() 更新 DDX 变量,然后返回一个代码标识是否可以关闭这个属性表:
int CBackgroundOptsPage::OnApply()
{
return DoDataExchange(true) ? PSNRET_NOERROR : PSNRET_INVALID;
}
我们还要在主窗口添加一个Tools|Options菜单来打开属性表,这个菜单的处理函数创建一个属性表,但是添加了一个新属性页CBackgroundOptsPage。
void CMainFrame::OnOptions ( UINT uCode, int nID, HWND hwndCtrl )
{
CPropertySheet sheet ( _T("PSheets Options"), 0 );
CBackgroundOptsPage pgBackground;
CPropertyPage<IDD_ABOUTBOX> pgAbout;
pgBackground.m_nColor = m_view.m_nColor;
pgBackground.m_nPicture = m_view.m_nPicture;
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
sheet.AddPage ( pgBackground );
sheet.AddPage ( pgAbout );
if ( IDOK == sheet.DoModal() )
m_view.SetBackgroundOptions ( pgBackground.m_nColor,
pgBackground.m_nPicture );
}
属性表的构造函数的第二个参数是0,表示将索引是0的页面初始是可见的,你可以将其设为1,使得属性表第一次显示时显示关于页面。既然是演示代码,我就偷个懒,使用一个公有变量与CBackgroundOptsPage属性页的radio button建立关联,在主窗口中直接为其赋初始值,当用户单击属性表的OK按钮时在将其读出来。
更多精彩
赞助商链接