ExtChildResizablePropertySheet.cpp
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // ExtChildResizablePropertySheet.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ResizableChildSheet.h"
  5. #include "MainFrm.h"
  6. #include "ExtChildResizablePropertySheet.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CExtChildResizablePropertySheet
  14. IMPLEMENT_DYNCREATE(CExtChildResizablePropertySheet, CExtResizablePropertySheet)
  15. BEGIN_MESSAGE_MAP(CExtChildResizablePropertySheet, CExtResizablePropertySheet)
  16. //{{AFX_MSG_MAP(CExtChildResizablePropertySheet)
  17. //}}AFX_MSG_MAP
  18. END_MESSAGE_MAP()
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CExtChildResizablePropertySheet construction/destruction
  21. CExtChildResizablePropertySheet::CExtChildResizablePropertySheet()
  22. : m_bInitTabSingleLine( false )
  23. , m_bInitTabButtons( false )
  24. , m_bInitTabButtonsFlat( false )
  25. , m_bInitTabSeparatorsFlat( false )
  26. , m_bTabStylesInitialized( false )
  27. {
  28. // TODO: add member initialization code here
  29. m_bShowResizingGripper = false;
  30. }
  31. CExtChildResizablePropertySheet::~CExtChildResizablePropertySheet()
  32. {
  33. }
  34. BOOL CExtChildResizablePropertySheet::Create( CWnd * pWndParent )
  35. {
  36. if( !CExtResizablePropertySheet::Create(pWndParent,WS_CHILD|WS_VISIBLE) )
  37. {
  38. ASSERT( FALSE );
  39. return FALSE;
  40. }
  41. ModifyStyle(
  42. WS_THICKFRAME|WS_BORDER|WS_CAPTION|WS_SYSMENU,
  43. 0,
  44. SWP_FRAMECHANGED
  45. );
  46. ModifyStyleEx(
  47. WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE|WS_EX_CLIENTEDGE,
  48. 0,
  49. SWP_FRAMECHANGED
  50. );
  51. return TRUE;
  52. }
  53. BOOL CExtChildResizablePropertySheet::PreTranslateMessage(MSG* pMsg)
  54. {
  55. CMainFrame * pMainFrame =
  56. STATIC_DOWNCAST( CMainFrame, AfxGetMainWnd() );
  57. if( pMainFrame->m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
  58. return TRUE;
  59. return CExtResizablePropertySheet::PreTranslateMessage(pMsg);
  60. }
  61. void CExtChildResizablePropertySheet::_TrickSyncActviveChild()
  62. {
  63. CPropertyPage * pWnd = CPropertySheet::GetActivePage();
  64. CTabCtrl * pTabCtrl = CPropertySheet::GetTabControl();
  65. if( pWnd != NULL
  66. && pWnd->GetSafeHwnd() != NULL
  67. && pTabCtrl != NULL
  68. && pTabCtrl->GetSafeHwnd() != NULL
  69. )
  70. {
  71. if( !m_bTabStylesInitialized )
  72. {
  73. m_bTabStylesInitialized = true;
  74. DWORD dwStylesRemove = 0L;
  75. DWORD dwStylesAdd = 0L;
  76. if( m_bInitTabSingleLine )
  77. {
  78. dwStylesRemove |= TCS_MULTILINE;
  79. dwStylesAdd |= TCS_SINGLELINE;
  80. }
  81. if( m_bInitTabButtons )
  82. {
  83. dwStylesAdd |= TCS_BUTTONS;
  84. if( m_bInitTabButtonsFlat )
  85. dwStylesAdd |= TCS_FLATBUTTONS;
  86. }
  87. if( dwStylesRemove != 0 || dwStylesAdd != 0 )
  88. pTabCtrl->ModifyStyle(
  89. dwStylesRemove,
  90. dwStylesAdd,
  91. SWP_FRAMECHANGED
  92. );
  93. if( m_bInitTabButtons && m_bInitTabButtonsFlat && m_bInitTabSeparatorsFlat )
  94. pTabCtrl->SetExtendedStyle( TCS_EX_FLATSEPARATORS, TCS_EX_FLATSEPARATORS );
  95. }
  96. RECT lpRect;
  97. GetClientRect(&lpRect);
  98. // dirty fix of the access vialation bug of
  99. // the tab control with single item when item's
  100. // width/height is same as tab control width/height
  101. __try
  102. {
  103. pTabCtrl->AdjustRect(FALSE, &lpRect);
  104. }
  105. __except( EXCEPTION_EXECUTE_HANDLER )
  106. {
  107. lpRect.right ++;
  108. lpRect.bottom ++;
  109. __try
  110. {
  111. pTabCtrl->AdjustRect(FALSE, &lpRect);
  112. }
  113. __except( EXCEPTION_EXECUTE_HANDLER )
  114. {
  115. }
  116. }
  117. pWnd->MoveWindow(&lpRect, TRUE);   
  118. }
  119. }