BCGP实现属性页

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\n");
         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\n");
         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个视图

转载于:https://www.cnblogs.com/totogo/p/10621287.html

你可能感兴趣的:(BCGP实现属性页)