XTResizePropertySheet.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:7k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTResizePropertySheet.cpp: implementation of the CXTResizePropertySheet class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Common/XTPWinThemeWrapper.h"
  22. #include "Common/XTPDrawHelpers.h"
  23. #include "XTResizeRect.h"
  24. #include "XTResizePoint.h"
  25. #include "XTResize.h"
  26. #include "XTResizePropertyPage.h"
  27. #include "XTResizePropertySheet.h"
  28. #ifdef _DEBUG
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #define new DEBUG_NEW
  32. #endif
  33. #pragma warning(disable: 4355) // 'this' : used in base member initializer list
  34. // Wizard mode ID's not in AFX headers
  35. #define ID_WIZLINE      (ID_WIZFINISH + 1)
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CXTResizePropertySheet
  38. IMPLEMENT_DYNCREATE(CXTResizePropertySheet, CPropertySheet)
  39. BEGIN_MESSAGE_MAP(CXTResizePropertySheet, CPropertySheet)
  40. //{{AFX_MSG_MAP(CXTResizePropertySheet)
  41. ON_WM_SIZE()
  42. ON_WM_GETMINMAXINFO()
  43. ON_WM_DESTROY()
  44. //}}AFX_MSG_MAP
  45. ON_NOTIFY_REFLECT_EX(PSN_SETACTIVE, OnPageChanging)
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CXTResizePropertySheet construction/destruction
  49. CXTResizePropertySheet::CXTResizePropertySheet() // add default constructor, PCVA - Yair 3/6/2003
  50. : CPropertySheet()
  51. , CXTResize(this, 0)
  52. {
  53. }
  54. CXTResizePropertySheet::CXTResizePropertySheet(const UINT nCaption, CWnd* pParent, const UINT nSelectPage, const UINT nFlags)
  55. : CPropertySheet(nCaption, pParent, nSelectPage)
  56. , CXTResize(this, nFlags)
  57. {
  58. }
  59. CXTResizePropertySheet::CXTResizePropertySheet(LPCTSTR pszCaption, CWnd* pParent, const UINT nSelectPage, const UINT nFlags)
  60. : CPropertySheet(pszCaption, pParent, nSelectPage)
  61. , CXTResize(this, nFlags)
  62. {
  63. }
  64. BOOL CXTResizePropertySheet::OnInitDialog()
  65. {
  66. CRect rcClientBegin, rcClientEnd;
  67. GetWindowRect(rcClientBegin);
  68. SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)(LPRECT)rcClientBegin);
  69. // Modify the window style to include WS_THICKFRAME for resizing.
  70. ::SetWindowLong(m_hWnd,
  71. GWL_STYLE, GetStyle() | WS_THICKFRAME);
  72. GetWindowRect(rcClientEnd);
  73. SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)(LPRECT)rcClientEnd);
  74. CPropertySheet::OnInitDialog();
  75. // subclass our "flicker-free" tab control.
  76. m_tabCtrl.SubclassWindow(GetTabControl()->m_hWnd);
  77. // the size icon is too close to the buttons, so inflate the sheet
  78. CRect rc;
  79. GetWindowRect(rc);
  80. if (rcClientBegin.Width() - rcClientEnd.Width() > 3)
  81. {
  82. rc.InflateRect((rcClientBegin.Width() - rcClientEnd.Width()) / 2,
  83. (rcClientBegin.Height() - rcClientEnd.Height()) / 2);
  84. MoveWindow(rc);
  85. }
  86. // Do this last so that any prop pages are moved accordingly
  87. else if (!HasFlag(xtResizeNoSizeIcon) && !IsWizard())
  88. {
  89. rc.InflateRect(1, 1, 2, 2);
  90. MoveWindow(rc);
  91. }
  92. // add sizing entries to the system menu
  93. CMenu* pSysMenu = (CMenu*)GetSystemMenu(FALSE);
  94. if (pSysMenu)
  95. {
  96. CString szMaximize, szMinimize, szSize, szRestore;
  97. // try to get the strings from the topmost window
  98. CWnd* pwndTop;
  99. for (pwndTop = this; pwndTop->GetParent(); pwndTop = pwndTop->GetParent());
  100. CMenu* pTopSysMenu = (CMenu*)pwndTop->GetSystemMenu(FALSE);
  101. if (pTopSysMenu)
  102. {
  103. pTopSysMenu->GetMenuString(SC_MAXIMIZE, szMaximize, MF_BYCOMMAND);
  104. pTopSysMenu->GetMenuString(SC_MINIMIZE, szMinimize, MF_BYCOMMAND);
  105. pTopSysMenu->GetMenuString(SC_SIZE, szSize, MF_BYCOMMAND);
  106. pTopSysMenu->GetMenuString(SC_RESTORE, szRestore, MF_BYCOMMAND);
  107. }
  108. // if we din't get the strings then set them to the English defaults
  109. if (szMaximize.IsEmpty()) szMaximize = _T("Ma&ximize");
  110. if (szMinimize.IsEmpty()) szMinimize = _T("Mi&nimize");
  111. if (szSize.IsEmpty()) szSize = _T("&Size");
  112. if (szRestore.IsEmpty()) szRestore = _T("&Restore");
  113. pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_SEPARATOR, 0, (LPCTSTR) 0);
  114. pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_MAXIMIZE, szMaximize);
  115. pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_MINIMIZE, szMinimize);
  116. pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_SIZE, szSize);
  117. pSysMenu->InsertMenu(0, MF_BYPOSITION | MF_STRING, SC_RESTORE, szRestore);
  118. }
  119. DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
  120. if ((dwStyle & WS_THICKFRAME) == 0)
  121. {
  122. SetFlag(xtResizeNoSizeIcon);
  123. }
  124. CXTResize::Init();
  125. // Check which buttons are available in sheet or wizard
  126. if (IsWizard())
  127. {
  128. SetResize(ID_WIZBACK, SZ_REPOS(1));
  129. SetResize(ID_WIZNEXT, SZ_REPOS(1));
  130. SetResize(ID_WIZFINISH, SZ_REPOS(1));
  131. SetResize(ID_WIZLINE, SZ_BOTTOM_LEFT, SZ_BOTTOM_RIGHT);
  132. }
  133. else
  134. {
  135. SetResize(IDOK, SZ_REPOS(1));
  136. SetResize(ID_APPLY_NOW, SZ_REPOS(1));
  137. SetResize(AFX_IDC_TAB_CONTROL, SZ_RESIZE(1));
  138. }
  139. SetResize(IDCANCEL, SZ_REPOS(1));
  140. SetResize(IDHELP, SZ_REPOS(1));
  141. // set page sizings
  142. CRect rcPage;
  143. GetActivePage()->GetWindowRect(rcPage);
  144. ScreenToClient(rcPage);
  145. int i;
  146. for (i = 0; i <GetPageCount(); i++)
  147. {
  148. SetResize(GetPage(i), SZ_RESIZE(1), rcPage);
  149. }
  150. return TRUE;
  151. }
  152. void CXTResizePropertySheet::OnGetMinMaxInfo(MINMAXINFO* pMMI)
  153. {
  154. CXTResize::GetMinMaxInfo(pMMI);
  155. }
  156. void CXTResizePropertySheet::OnSize(UINT nType, int cx, int cy)
  157. {
  158. CPropertySheet::OnSize(nType, cx, cy);
  159. CXTResize::Size();
  160. }
  161. BOOL CXTResizePropertySheet::OnPageChanging(NMHDR* /*pNotifyStruct*/, LRESULT* /*pResult*/)
  162. {
  163. // When in wizard mode, the property sheet seems to resize/move the page
  164. // back to it's original size/position on the sheet.  We need to let the
  165. // size manager know that this has occurred, so that it can move the pages
  166. // back to the correct position
  167. if (IsWizard())
  168. {
  169. CXTResize::Reset();
  170. }
  171. // Update new wizard page, the active page changes after this notification
  172. CXTResize::Size();
  173. // and continue routing...
  174. return FALSE;
  175. }
  176. void CXTResizePropertySheet::OnDestroy()
  177. {
  178. // Save window placement if AutoLoadPlacement was used.
  179. if (!m_strSection.IsEmpty())
  180. {
  181. SavePlacement(m_strSection);
  182. }
  183. CPropertySheet::OnDestroy();
  184. }