5.5--如何控制属性单窗口的尺寸?

来源:互联网 发布:韩国ls plc编程软件 编辑:程序博客网 时间:2024/05/10 10:34

      通常不需要考虑属性单窗口的尺寸,仅仅设计属性页并把它加入属性单,就已经能正常工作了。这是因为属性单窗口能自动改变自身的尺寸来适应最大的属性页以及标准按钮:OK、Cancel、和Apply。然而,有时可能希望明确的控制属性单窗口的尺寸(例如:当隐藏几个属性单的标准按钮后,属性单窗口的宽度通常没有必要那么宽,尤其是当属性页相当窄的情况)。下面的技术显示改变属性单窗口的尺寸来适应需求。

 

第一步:实现EkResizePropertySheet()函数,该函数只在水平方向上改变属性单窗口的尺寸,这是因为标准的属性单动作根据属性页的高度自动调节属性单窗口的高度。

void EkResizePropertySheet( CPropertySheet* pPSheet, int nWidth )
{
      ASSERT_VALID( pPSheet );

      // 1 - 计算标签控件和属性窗口当前的尺寸
      CTabCtrl* pTabCtrl = pPSheet->GetTabControl();
      ASSERT( pTabCtrl != NULL );

      CRect rcTabCtrl;
      pTabCtrl->GetWindowRect( &rcTabCtrl );
      pPSheet->ScreenToClient( &rcTabCtrl );

      CRect rcPSheet;
      pPSheet->GetWindowRect( &rcPSheet );

 

      // 2 - 调整偏移大小

      int dcx = rcPSheet.Width() - nWidth;

 

      // 3 - 调整窗口尺寸

      pPSheet->SetWindowPos( NULL, 0, 0,nWidth, rcPSheet.Height(), SWP_NOZORDER |

                                                                                                              SWP_NOMOVE | SWP_NOACTIVATE );


      // 4 - Resize tab control window to restore right margin
 pTabCtrl->SetWindowPos( NULL,0, 0,rcTabCtrl.Width() - dcx,rcTabCtrl.Height(), SWP_NOZORDER |

                                                                                                               SWP_NOMOVE | SWP_NOACTIVATE );

 

      // 5 - Activate each property page to prevent drawing problem
      int nCurrentPage = pPSheet->GetActiveIndex();
      for( int i = 0; i < pPSheet->GetPageCount(); ++i )
      {
            pPSheet->SetActivePage( i );
      }

      pPSheet->SetActivePage( nCurrentPage );
}

 

第二步:在OnInitDialog()函数里调用上面定义的函数