模态属性与非模态属性页

在资源编辑器设置了属性页之后,就可以通过ClassWizard创建一个CPropertyPage派生类了,其方式与创建CDialog派生类非常相似,惟一的区别在于不是选择CDialog而是选择 CPropertyPage作为基类。为了创建和显示一个模态属性单,通常会在栈上声明一个CPropertySheet对象,并调用其DoModal函数(就像CDialog对象所做的那样)。但是,对于属性页则需要在调用属性单的DoModal函数之前给属性单添加相应的属性页:       protected:
            CPropertySheet m_sheet;
            CMyPropertyPage1 m_pageMyPage1; //CMyPropertyPage1是自己声明的基于CPropertyPage的类
      然后再在OnInitDialog()函数中调用
          sheet.AddPage(&m_pageMyPage1);
          sheet.DoModal();
     显示无模态属性单和显示模态属性单的方法基本相同,主要差别在于不是使用DoModal()函数,而是使用CPropertySheet::Create()函数显示属性单。但是要注意:在负责显示属性单的函数内,检查属性单的HWND成员变量,确定是否已经创建了该属性单,如果还没有创建该属性单,则实例化各页面对象,通过AddPage把他们添加到属性单中,然后再调用Create显示该属性单;如果已经构造了属性单,则调用BringWindowToTop()函数就能很容易的找的袄属性单了,代码如下:
      HWND hwnd = g_sheet.GetSafeHwnd();
      if (!hwnd)
      {
          CPropPage1* p1 = new CPropPage1();
          CPropPage2* p2 = new CPropPage2();
          sheet.AddPage(p1);
          sheet.Create();
     }
     else
     {
           sheet.BringWindowToTop();
     }
    当要从内存中清除这些页面是可以重载属性单类的PostNcDestroy()虚函数:
    PostNcDestroy()
    {
         int nPages = GetPageCount();
         for (int i = (nPages - 1); i >= 0; i--)
         {
               CPropertyPage* pPage = GetPage(i);
               ASSERT(pPage);
              if (pPage)
              {
                     delete pPage;
                     RemovePage(i);
                     TRACE("[CMyPropertySheet::OnDestroy] Removing page %ld/n", i);
              }
         }
       CPropertySheet::PostNcDestroy();
      }
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值