大家好,我按照如下方式使用标题中的两个类,但是发现属性页没有显示,请问是为什么。谢谢!1,建立一个对话框资源,自动创建相关类CPropertyDialogDlg并且在其中定义一个CPropertySheet变量
2,建立第二个对话框资源,自动创建相关类CPage1并且将其派生的对象从CDialog改为CpropertyPage
3,在CPropertyDialogDlg的构造函数中加入如下次代码
   m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
   Page1.Create(IDD_DIALOG1);
   m_sheet.AddPage(&Page1);

解决方案 »

  1.   

    在对话框的初始化函数中: pHKSheet=new CHKCSPSheet("DemoSheet");
    pg_PropPage1=new CPropPageFirst();
    pg_PropPage2=new CPropPageSecond(); ((CHKCSPSheet*)pHKSheet)->AddPage(&m_PropPage1);
    ((CHKCSPSheet*)pHKSheet)->AddPage(&m_PropPage2); if (!((CHKCSPSheet*)pHKSheet)->Create(this,DS_CONTEXTHELP|DS_SETFONT|WS_CHILD|WS_VISIBLE))
    {
    DestroyWindow();
    return false;
    }
    //定位
    ((CHKCSPSheet*)pHKSheet)->SetWindowPos(NULL,0,60,220,180,SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE);
      

  2.   

      
    //头文件中定义
    page1 m_page1;//sheet构造函数
    CMyPropertySheet::CMyPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
    {
        AddPage(&m_page1);
    }//创建sheet
     m_sheet.Create();
      

  3.   

    你的Page1在构造函数结束又会被销毁
      

  4.   

    留个信箱,给你发vc6的demo工程
      

  5.   

    CTst1Dlg::CTst1Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTst1Dlg::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CTst1Dlg)
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);        m_sheet.AddPage(&m_page);
            m_sheet.Create();}
    }我这样能正常显示,只是属性页被主对话框覆盖了,所以一般不要放在构造里了...可以放在按钮的响应里
    我用的 VC6.0
      

  6.   

    请发送到 [email protected] 谢谢11楼。
      

  7.   

    请查看 4楼的方法,主要是楼主少了 SetWindowPos 的方法,所以 属性页没有显示出来(或者显示出来了但是不在可见区域)。还有一种方法就是,在对话框上加入一个 静态控件(CStatic Text), 调整它的大小和位置,该控件就是你的属性页显示的地方,在你的代码后,加入以下代码
    CRect rect;
    m_ctlStatic.GetWindowRect(&rect);  //m_ctlStatic 为上面静态控件的成员变量
    ScreenToClient(&rect);m_sheet.MoveWindow(&rect);