1.建立SDI工程SSTools。
2.视图类继承于CBCGPFormView.
3.SSToolsView默认关联了一个对话框。构造函数初始化需要填上该对话框的IDD
CSSOToolsView::CSSOToolsView()
: CBCGPFormView(CSSOToolsView::IDD)
4.添加一个page dlg.关生成 CPropertyPage1类,该类继承于CBCGPPropertyPage,同样,构造函数也需要关联IDD:
CPropertyPage1::CPropertyPage1() : CBCGPPropertyPage(CPropertyPage1::IDD)
5.在view类 中HandleInitDialog添加 page面页:(view类是OnInitialUpdate)
m_wndPropSheet.AddPage(&m_Page1);
//m_wndPropSheet.AddPage(&m_Page2);
//m_wndPropSheet.AddPage(&m_Page3);
//m_wndPropSheet.AddPage(&m_Page4);
//m_wndPropSheet.AddPage(&m_Page5);
if (!m_wndPropSheet.Create(this, WS_TABSTOP | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE, 0))
{
TRACE0("Cannot create property sheet control
");
return 0;
}
6.添加完编译运行后会 崩溃。。。。找原因吧。
注意,页面上加了个picture contrl, 默认需要隐藏,否则 运行后会盖住 下面的page 页面中的控件,由于控件 还没有最大化显示。
发现是Create m_wndPropSheet时出的错,前面addpage了 ,为什么还会出错呢?:
if (!m_wndPropSheet.Create(this, WS_TABSTOP | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE, 0))
{
TRACE0("Cannot create property sheet control
");
return 0;
}
原来添加的page页面的dialog我生成的类选择了继承MFCPropertyPage造成的,默认是继承于CDialogEx,
不能更改,后面生成完类再改为继承 于CBCGPPropertyPage...
7.添加完一组属性页,后再添加一组,用来实现视图切换显示不同的属性页。
以同样方法添加完CSSOToolsView2,再添加一个page3, 测试,改app中默认运行的view类为CSSOToolsView2,则提示出错 - 不支持尝试执行的操作
是由于做这一步,用的CSSOToolsView2是从CSSOToolsView改过来的,里面带有一个cstatic的 picture contrl :m_wndPropSheetPlaceHolder
后面代码里面有用到,却没有添加。添加上就可以了
注: 由于添加dlg后双击就可以添加一个对话框类,但是遇到像CSSOToolsView2 这种先复制的,再去建立一个dlg显示是冲突,其它关联了IDD 就可以,但是会遇到在这个dlg上面右键添加 控件变量 会没反应,,可以看一下 是不是 .h中已经存在了。遇到过这情况。
测试2个view视图类都能单独运行。
7.添加ribbon功能区实现切换2个视图