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

对话框与窗口

开发平台:

Visual C++

  1. // XTResize.h: interface for the CXTResize 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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTRESIZE_H__)
  22. #define __XTRESIZE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. // -------------------------------------------------------------------
  28. // Summary:
  29. //     Enumeration used to determine attributes for resizing windows.
  30. // Remarks:
  31. //     XTResize type defines the constants used by the CXTResize
  32. //     class to determine how a window will appear when it is resized.
  33. // See Also:
  34. //     CXTResize
  35. //
  36. // <KEYWORDS xtResizeNoSizeIcon, xtResizeNoHorizontal, xtResizeNoVertical, xtResizeNoMinsize, xtResizeNoClipChildren, xtResizeNoTransparentGroup>
  37. // -------------------------------------------------------------------
  38. enum XTResize
  39. {
  40. xtResizeNoSizeIcon         = 0x01, // Do not add size icon.
  41. xtResizeNoHorizontal       = 0x02, // No horizontal resizing.
  42. xtResizeNoVertical         = 0x04, // No vertical resizing.
  43. xtResizeNoMinsize          = 0x08, // Do not require a minimum size.
  44. xtResizeNoClipChildren     = 0x10, // Do not set clip children style.
  45. xtResizeNoTransparentGroup = 0x20  // Do not set transparent style for group boxes.
  46. };
  47. //{{AFX_CODEJOCK_PRIVATE
  48. // Obsolete
  49. #define xtResizeNoHorisontal xtResizeNoHorizontal
  50. //}}AFX_CODEJOCK_PRIVATE
  51. // ---------------------------------------------------------------------
  52. // Remarks:
  53. //     XT_SIZING structure is used by the CXTResize class to
  54. //     maintain information for a particular window that is being sized.
  55. // See Also:
  56. //     CXTResize
  57. // ---------------------------------------------------------------------
  58. struct XT_SIZING
  59. {
  60. UINT            id;     // Control identifier of the window sized.
  61. XT_RESIZERECT   rrc;    // Size of the window sized.
  62. };
  63. class CXTResize;
  64. //===========================================================================
  65. // Summary:
  66. //     CXTResizeItem is a stand alone helper class. It is used by CXTResize to
  67. //     maintain information about each item to be sized or moved.
  68. //===========================================================================
  69. class _XTP_EXT_CLASS CXTResizeItem
  70. {
  71. public:
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     Constructs a CXTResizeItem object
  75. // Parameters:
  76. //     pWnd        - Pointer to the window to be sized or moved.
  77. //     rrcSizing   - Reference to a CXTResizeRect object.
  78. //     rcWindow    - Reference to a CRect object.
  79. //     bAutoDelete - TRUE if the window is to be deleted.
  80. //-----------------------------------------------------------------------
  81. CXTResizeItem(CWnd* pWnd, const CXTResizeRect& rrcSizing, CRect& rcWindow, BOOL bAutoDelete);
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     Destroys a CXTResizeItem object, handles cleanup and deallocation
  85. //-----------------------------------------------------------------------
  86. virtual ~CXTResizeItem();
  87. public:
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Called by CXTResize to make group box controls window style
  91. //     transparent.
  92. // Parameters:
  93. //     pXTResize - Points the resize manager.
  94. // Returns:
  95. //     True if the WS_EX_TRANSPARENT style was set for the window,
  96. //     otherwise false.
  97. //-----------------------------------------------------------------------
  98. virtual bool MakeTransparent(CXTResize* pXTResize);
  99. public:
  100. BOOL m_bIsGroupBox;             // TRUE if the window is a group box.
  101. BOOL m_bAutoDelete;             // TRUE if the window is to be deleted.
  102. BOOL m_bInitialSize;            // Initial size/move has been completed.
  103. CWnd* m_pWnd;                   // A pointer to the window to be sized or moved.
  104. CXTResizeRect m_rrcSizing;      // Sizing option.
  105. CXTResizeRect m_rrcWindow;      // Last control size.
  106. CXTResizeRect m_rrcInitWindow;  // Initial control size.
  107. };
  108. //===========================================================================
  109. // Summary:
  110. //     The CXTSizeIcon class is a CStatic derived helper class. It is used
  111. //     by CXTResize to display the sizing grip in the lower right corner of
  112. //     a sizing window.
  113. //===========================================================================
  114. class _XTP_EXT_CLASS CXTSizeIcon : public CScrollBar
  115. {
  116. public:
  117. //-----------------------------------------------------------------------
  118. // Summary:
  119. //     Constructs a CXTSizeIcon object
  120. //-----------------------------------------------------------------------
  121. CXTSizeIcon();
  122. //-----------------------------------------------------------------------
  123. // Summary:
  124. //     Destroys a CXTSizeIcon object, handles cleanup and deallocation
  125. //-----------------------------------------------------------------------
  126. virtual ~CXTSizeIcon();
  127. protected:
  128. //{{AFX_CODEJOCK_PRIVATE
  129. DECLARE_MESSAGE_MAP()
  130. //{{AFX_MSG(CXTSizeIcon)
  131. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  132. //}}AFX_MSG
  133. //}}AFX_CODEJOCK_PRIVATE
  134. protected:
  135. HCURSOR m_hCursor; // Handle to the cursor displayed for the size icon
  136. };
  137. //===========================================================================
  138. // Summary:
  139. //     CXTResize is a base class. It is used by resizing dialogs, property
  140. //     sheets, and form views. It acts as a manager to maintain size and location
  141. //     of the dialog and dialog items.
  142. //===========================================================================
  143. class _XTP_EXT_CLASS CXTResize
  144. {
  145. public:
  146. //-----------------------------------------------------------------------
  147. // Summary:
  148. //     Constructs a CXTResize object
  149. // Parameters:
  150. //     pWnd   - Points to the parent or owner window object, of type CWnd, to which the
  151. //              resizing object belongs.
  152. //     nFlags - Flags that are to be passed to CXTResize that specify the attributes
  153. //              of the resizing property page. See Remarks section for a list of flags.
  154. // Remarks:
  155. //     Styles to be added or removed can be combined by using the bitwise
  156. //     OR (|) operator. It can be one or more of the following:
  157. //          * <b>xtResizeNoSizeIcon</b> Do not add size icon.
  158. //          * <b>xtResizeNoHorizontal</b> No horizontal resizing.
  159. //          * <b>xtResizeNoVertical</b> No vertical resizing.
  160. //          * <b>xtResizeNoMinsize</b> Do not require a minimum size.
  161. //          * <b>xtResizeNoClipChildren</b> Do not set clip children style.
  162. //          * <b>xtResizeNoTransparentGroup</b> Do not set transparent style for group boxes.
  163. //-----------------------------------------------------------------------
  164. CXTResize(CWnd* pWnd, const UINT nFlags = 0);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Destroys a CXTResize object, handles cleanup and deallocation
  168. //-----------------------------------------------------------------------
  169. virtual ~CXTResize();
  170. public:
  171. //-----------------------------------------------------------------------
  172. // <COMBINE CXTResize::SetResize@CWnd*@const CXTResizeRect&@CRect>
  173. //-----------------------------------------------------------------------
  174. void SetResize(const UINT nID, XT_RESIZE left, XT_RESIZE top, XT_RESIZE right, XT_RESIZE bottom);
  175. //-----------------------------------------------------------------------
  176. // <COMBINE CXTResize::SetResize@CWnd*@const CXTResizeRect&@CRect>
  177. //-----------------------------------------------------------------------
  178. void SetResize(const UINT nID, const XT_RESIZERECT& rrcSizing);
  179. //-----------------------------------------------------------------------
  180. // <COMBINE CXTResize::SetResize@CWnd*@const CXTResizeRect&@CRect>
  181. //-----------------------------------------------------------------------
  182. void SetResize(const UINT nID, const HWND hWnd, const XT_RESIZERECT& rrcSizing);
  183. //-----------------------------------------------------------------------
  184. // <COMBINE CXTResize::SetResize@CWnd*@const CXTResizeRect&@CRect>
  185. //-----------------------------------------------------------------------
  186. void SetResize(const UINT nID, const HWND hWnd, const XT_RESIZEPOINT& rpTopLeft, const XT_RESIZEPOINT& rpBottomRight);
  187. //-----------------------------------------------------------------------
  188. // <COMBINE CXTResize::SetResize@CWnd*@const CXTResizeRect&@CRect>
  189. //-----------------------------------------------------------------------
  190. void SetResize(const UINT nID, const XT_RESIZEPOINT& rpTopLeft, const XT_RESIZEPOINT& rpBottomRight);
  191. //-----------------------------------------------------------------------
  192. // Summary:
  193. //     This member function sets the minimum size explicitly. Initial size
  194. //     is the default.
  195. // Parameters:
  196. //     sz - Specifies the minimum width and height the dialog can be sized to.
  197. //-----------------------------------------------------------------------
  198. void SetMinSize(CSize& sz);
  199. //-----------------------------------------------------------------------
  200. // Summary:
  201. //     This member function sets the maximum size. No maximum is the default.
  202. // Parameters:
  203. //     sz - Specifies the maximum width and height the dialog can be sized to.
  204. //-----------------------------------------------------------------------
  205. void SetMaxSize(CSize& sz);
  206. //-----------------------------------------------------------------------
  207. // Summary:
  208. //     This member function saves the window placement to the registry.
  209. // Parameters:
  210. //     pszSection - Name of a section in the initialization file or a key in the Windows
  211. //                  registry where placement information is stored.
  212. // Returns:
  213. //     TRUE if succeeds
  214. //-----------------------------------------------------------------------
  215. BOOL SavePlacement(LPCTSTR pszSection);
  216. //-----------------------------------------------------------------------
  217. // Summary:
  218. //     This member function loads saved window placement information from
  219. //     the registry.
  220. // Parameters:
  221. //     pszSection - Name of a section in the initialization file or a key in the Windows
  222. //                  registry where placement information is stored.
  223. // Returns:
  224. //     TRUE if position was changed
  225. //-----------------------------------------------------------------------
  226. BOOL LoadPlacement(LPCTSTR pszSection);
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     This member function loads saved window placement information from
  230. //     the registry. This version is the same as LoadPlacement but there
  231. //     is no need for calling SavePlacement when the window is destroyed.
  232. //     This will be called automatically.
  233. // Parameters:
  234. //     pszSection - Name of a section in the initialization file or a key in the Windows
  235. //                  registry where placement information is stored.
  236. // Returns:
  237. //     TRUE if position was changed
  238. //-----------------------------------------------------------------------
  239. BOOL AutoLoadPlacement(LPCTSTR pszSection);
  240. protected:
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     The SetResize function specifies how much each side of a control will
  244. //     move when the dialog is resized. If a control should be repositioned
  245. //     (e.g. an OK button) then all four sides should move by the same amount
  246. //     of pixels, as the dialog is resized. If a control should be resized
  247. //     just as much as the dialog (e.g. the list control in the file dialog),
  248. //     then the left and top sides shouldn't move, and the right and bottom
  249. //     sides should move by the same amount of pixels as the dialog.
  250. // Parameters:
  251. //     nID           - Specifies the control's ID.
  252. //     pWnd          - Points to the dialog item to be resized.
  253. //     hWnd          - HWND of the dialog item to be sized.
  254. //     rrcSizing     - How much the left, top, right, and bottom sides will move when
  255. //                     the dialog is resized.
  256. //     rcWindow      - Initial size of the dialog item.
  257. //     left          - How much the left side will move when the dialog is resized.
  258. //     top           - How much the top side will move when the dialog is resized.
  259. //     right         - How much the right side will move when the dialog is resized.
  260. //     bottom        - How much the bottom side will move when the dialog is resized.
  261. //     rpTopLeft     - How much the top and left sides will move when the dialog is resized.
  262. //     rpBottomRight - How much the bottom and right sides will move when the dialog is resized.
  263. //     arr           - Array of XT_SIZING structures that specify how much the left, top,
  264. //                     right, and bottom sides of the dialog item will move when the dialog
  265. //                     is resized.
  266. //-----------------------------------------------------------------------
  267. void SetResize(CWnd* pWnd, const CXTResizeRect& rrcSizing, CRect rcWindow);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     This member function is called to remove the specified dialog item
  271. //     from the list of items to be resized.
  272. // Parameters:
  273. //     nID - Specifies the control's ID.
  274. // Returns:
  275. //     TRUE if successful, otherwise returns FALSE.
  276. //-----------------------------------------------------------------------
  277. BOOL RemoveResize(const UINT nID);
  278. //-----------------------------------------------------------------------
  279. // Summary:
  280. //     This member function is called to purge the list that contains dialog
  281. //     items to be sized.
  282. //-----------------------------------------------------------------------
  283. void RemoveAllControls();
  284. //-----------------------------------------------------------------------
  285. // Summary:
  286. //     This member function is called from OnInitDialog or OnInitialUpdate
  287. //     to initialize the resize manager.
  288. //-----------------------------------------------------------------------
  289. virtual void Init();
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     This member function is called from OnSize to move and resize the dialog
  293. //     items that are managed.
  294. //-----------------------------------------------------------------------
  295. virtual void Size();
  296. //-----------------------------------------------------------------------
  297. // Summary:
  298. //     This member function is called when a property sheet in wizard mode
  299. //     has changed pages to alert the resize manager that the property sheet
  300. //     (common control) has moved the page back to its original size/position
  301. //     on the sheet.
  302. //-----------------------------------------------------------------------
  303. void Reset();
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     Called to offset dialog items by the amount specified by ptOffset.
  307. // Parameters:
  308. //     ptOffset - CPoint determines the amount in pixesl to offset
  309. //                dialog items.
  310. //-----------------------------------------------------------------------
  311. void Offset(CPoint ptOffset);
  312. //-----------------------------------------------------------------------
  313. // Summary:
  314. //     Call this method to reset m_rrcWindow for item.
  315. // Parameters:
  316. //     pWnd - Window to reset.
  317. //-----------------------------------------------------------------------
  318. void UpdateControlRect(CWnd* pWnd);
  319. //-----------------------------------------------------------------------
  320. // Summary:
  321. //     This member function is called from OnGetMinMaxInfo to get the
  322. //     maximized position or dimensions or the minimum or maximum tracking
  323. //     size. The maximized size is the size of the window when its borders
  324. //     are fully extended. The maximum tracking size of the window is the
  325. //     largest window size that can be achieved by using the borders to size
  326. //     the window. The minimum tracking size of the window is the smallest
  327. //     window size that can be achieved by using the borders to size the window.
  328. // Parameters:
  329. //     pMMI - Points to a MINMAXINFO structure that contains information about a
  330. //            window's maximized size and position and its minimum and maximum
  331. //            tracking size. For more information about this structure, see the
  332. //            MINMAXINFO structure.
  333. //-----------------------------------------------------------------------
  334. void GetMinMaxInfo(MINMAXINFO* pMMI);
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     This method called in Size method to adjust window rectangle to fit real client size
  338. // Parameters:
  339. //     rcWindow - Window rectangle to change
  340. //-----------------------------------------------------------------------
  341. virtual void AjustResizeRect(CSize& rcWindow);
  342. protected: // flags
  343. //-----------------------------------------------------------------------
  344. // Summary:
  345. //     This member function is called to determine if the specified flag
  346. //     has been set for the resize manager.
  347. // Parameters:
  348. //     eFlag - Flag to check, it can be one of the values in the Remarks section.
  349. // Remarks:
  350. //     Styles to be added can one of the following:
  351. //          * <b>xtResizeNoSizeIcon</b> Do not add size icon.
  352. //          * <b>xtResizeNoHorizontal</b> No horizontal resizing.
  353. //          * <b>xtResizeNoVertical</b> No vertical resizing.
  354. //          * <b>xtResizeNoMinsize</b> Do not require a minimum size.
  355. //          * <b>xtResizeNoClipChildren</b> Do not set clip children style.
  356. //          * <b>xtResizeNoTransparentGroup</b> Do not set transparent style
  357. //          for group boxes.
  358. // Returns:
  359. //     TRUE if the specified flag has been set, otherwise returns FALSE.
  360. //-----------------------------------------------------------------------
  361. BOOL HasFlag(XTResize eFlag);
  362. //-----------------------------------------------------------------------
  363. // Summary:
  364. //     This member function is called to set a specific flag for the resize
  365. //     manager.
  366. // Parameters:
  367. //     eFlag - Flag to check, it can be one of the values in the Remarks section.
  368. // Remarks:
  369. //     Styles to be added can one of the following:<p/>
  370. //     * <b>xtResizeNoSizeIcon</b> Do not add size icon.
  371. //     * <b>xtResizeNoHorizontal</b> No horizontal resizing.
  372. //     * <b>xtResizeNoVertical</b> No vertical resizing.
  373. //     * <b>xtResizeNoMinsize</b> Do not require a minimum size.
  374. //     * <b>xtResizeNoClipChildren</b> Do not set clip children style.
  375. //     * <b>xtResizeNoTransparentGroup</b> Do not set transparent style
  376. //       for group boxes.
  377. //-----------------------------------------------------------------------
  378. void SetFlag(XTResize eFlag);
  379. protected: // helper methods
  380. //-----------------------------------------------------------------------
  381. // Summary:
  382. //     Called by CXTResize to resize a child window.
  383. // Parameters:
  384. //     hdwp     - [in] Handle to a multiple-window - position structure that contains size and position information for one or more windows. This structure is returned by BeginDeferWindowPos or by the most recent call to DeferWindowPos.
  385. //     pItem    - [in] Pointer to a CXTResizeItem object that contains additional information about the window being sized.
  386. //     dx       - [in] Specifies the window's new width, in pixels.
  387. //     dy       - [in] Specifies the window's new height, in pixels.
  388. // Returns:
  389. //     TRUE if successful, otherwise FALSE.
  390. //-----------------------------------------------------------------------
  391. virtual BOOL Defer(HDWP& hdwp, CXTResizeItem* pItem, int dx, int dy);
  392. protected:
  393. typedef CArray<CXTResizeItem*, CXTResizeItem*&> CResizeItemArray;   // Used by CXTResize to maintain a list of children that are sizable.
  394. UINT            m_nFlagsXX;     // flags passed from constructor
  395. CWnd*           m_pWnd;         // the associative relation to the window to be resized
  396. CSize           m_szWindow;     // last dialog size
  397. CSize           m_szInitWindow; // Initial dialog size
  398. CSize           m_szMin;        // smallest size allowed
  399. CSize           m_szMax;        // largest size allowed
  400. CString         m_strSection;   // section in registry where window placement information is saved.
  401. CXTSizeIcon     m_scSizeIcon;   // size icon window
  402. CResizeItemArray    m_arrItems;     // array of controls
  403. friend class CXTResizeItem;
  404. };
  405. //////////////////////////////////////////////////////////////////////
  406. AFX_INLINE void CXTResize::SetMinSize(CSize& sz) {
  407. m_szMin = sz;
  408. }
  409. AFX_INLINE void CXTResize::SetMaxSize(CSize& sz) {
  410. m_szMax = sz;
  411. }
  412. AFX_INLINE BOOL CXTResize::HasFlag(XTResize eFlag) {
  413. return (m_nFlagsXX & eFlag) != 0;
  414. }
  415. AFX_INLINE void CXTResize::SetResize(const UINT nID, const HWND hWnd, const XT_RESIZEPOINT& rpTopLeft, const XT_RESIZEPOINT& rpBottomRight) {
  416. SetResize(nID, hWnd, CXTResizeRect(rpTopLeft.x, rpTopLeft.y, rpBottomRight.x, rpBottomRight.y));
  417. }
  418. AFX_INLINE void CXTResize::SetResize(const UINT nID, const XT_RESIZERECT& rrcSizing) {
  419. SetResize(nID, NULL, rrcSizing);
  420. }
  421. AFX_INLINE void CXTResize::SetResize(const UINT nID, const XT_RESIZEPOINT& rpTopLeft, const XT_RESIZEPOINT& rpBottomRight) {
  422. SetResize(nID, CXTResizeRect(rpTopLeft.x, rpTopLeft.y, rpBottomRight.x, rpBottomRight.y));
  423. }
  424. AFX_INLINE void CXTResize::SetResize(const UINT nID, XT_RESIZE left, XT_RESIZE top, XT_RESIZE right, XT_RESIZE bottom) {
  425. SetResize(nID, CXTResizeRect(left, top, right, bottom));
  426. }
  427. #endif // !defined(__XTRESIZE_H__)