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

对话框与窗口

开发平台:

Visual C++

  1. // XTSearchOptionsCtrl.h : header file
  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(__XTSEARCHOPTIONSCTRL_H__)
  22. #define __XTSEARCHOPTIONSCTRL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTSearchOptionsCtrl is a CStatic derived class. CXTSearchOptionsCtrl
  30. //     is used to create a control similar to the Search Options item found
  31. //     in the search pane of Windows Explorer as it is seen in Windows 2000 and
  32. //     later. This class allows you to associate a group of controls to be
  33. //     hidden or shown when the item is expanded and contracted and a set
  34. //     of controls that need to move depending on the CXTSearchOptionsCtrl state.
  35. //
  36. //          Use with CXTSearchOptionsView form view class to create a pane similar
  37. //          to the Windows Explorer search pane. To use the control, define a set
  38. //          of controls that are to be hidden and moved depending on the
  39. //          CXTSearchOptionsCtrl state.
  40. //
  41. // Example:
  42. //     The following example demonstrates how to use CXTSearchOptionsCtrl.
  43. // <code>
  44. // void CExpandTestView::OnInitialUpdate()
  45. // {
  46. //     CXTSearchOptionsView::OnInitialUpdate();
  47. //
  48. //     m_expand.AddControl(&m_check1);
  49. //     m_expand.AddControl(&m_check2);
  50. //     m_expand.AddControl(&m_edit1);
  51. //     m_expand.AddControl(&m_edit2);
  52. //
  53. //     m_expand.MoveControl(&m_button1);
  54. //     m_expand.MoveControl(&m_button2);
  55. //     m_expand.MoveControl(&m_combo1);
  56. //
  57. //     m_expand.SetLabelText(
  58. //         _T("Search Options <<"), _T("Search Options >>"));
  59. // }
  60. // </code>
  61. //
  62. //  See the "SearchOptions" demo for a complete example.
  63. //===========================================================================
  64. class _XTP_EXT_CLASS CXTSearchOptionsCtrl : public CStatic
  65. {
  66. DECLARE_DYNAMIC(CXTSearchOptionsCtrl)
  67. public:
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //     Constructs a CXTSearchOptionsCtrl object
  71. //-----------------------------------------------------------------------
  72. CXTSearchOptionsCtrl();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Destroys a CXTSearchOptionsCtrl object, handles cleanup and deallocation
  76. //-----------------------------------------------------------------------
  77. virtual ~CXTSearchOptionsCtrl();
  78. public:
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     Call this member function to determine if the search options
  82. //     control has been expanded.
  83. // Returns:
  84. //     True if expanded, otherwise returns false.
  85. //-----------------------------------------------------------------------
  86. bool IsExpanded() const;
  87. //-----------------------------------------------------------------------
  88. // Summary:
  89. //     Call this member function to add a control to the list of controls
  90. //     that are displayed when the hide item control is expanded.
  91. // Parameters:
  92. //     pWndCtrl - Points to a valid CWnd object to hide.
  93. //-----------------------------------------------------------------------
  94. void AddControl(CWnd* pWndCtrl);
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //     Call this member function to add a control to the list of controls
  98. //     that are moved when the hide item control is either expanded or contracted.
  99. // Parameters:
  100. //     pWndCtrl - Points to a valid CWnd object to move.
  101. //-----------------------------------------------------------------------
  102. void MoveControl(CWnd* pWndCtrl);
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Call this member function to set the text that is displayed when the
  106. //     hide item control is either expanded or contracted.
  107. // Parameters:
  108. //     lpszExpand   - NULL terminated string that represents the text displayed when
  109. //                    the control is expanded.
  110. //     lpszContract - NULL terminated string that represents the text displayed when
  111. //                    the control is contracted.
  112. //-----------------------------------------------------------------------
  113. void SetLabelText(LPCTSTR lpszExpand, LPCTSTR lpszContract);
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     Call this member function to expand the hide item control and display
  117. //     CWnd objects contained in the hide item list. Called by the control
  118. //     whenever the user clicks on the expand label.
  119. //-----------------------------------------------------------------------
  120. void Expand();
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //     Call this member function to contract the hide item control and hide
  124. //     CWnd objects contained in the hide item list. Called by the control
  125. //     whenever the user clicks on the contract label.
  126. //-----------------------------------------------------------------------
  127. void Contract();
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //     Call this member function to return the minimum height of the hide
  131. //     item control.
  132. // Returns:
  133. //     An integer value that represents the height of the
  134. //     control when it is contracted.
  135. //-----------------------------------------------------------------------
  136. int GetMinSize();
  137. //-----------------------------------------------------------------------
  138. // Summary:
  139. //     Call this member function to return the maximum height of the hide
  140. //     item control.
  141. // Returns:
  142. //     An integer value that represents the height of the
  143. //     control when it is expanded.
  144. //-----------------------------------------------------------------------
  145. int GetMaxSize();
  146. //-----------------------------------------------------------------------
  147. // Summary:
  148. //     Call this member function to return the offset size for the
  149. //     CXTSearchOptionsCtrl object. This is the distance the controls will
  150. //     be moved to accommodate for the expansion and contraction of the control.
  151. //     Also used by CXTSearchOptionsView for adjusting scroll sizes.
  152. // Returns:
  153. //     An integer value that represents the distance the controls will be moved.
  154. //-----------------------------------------------------------------------
  155. int GetOffsetSize();
  156. protected:
  157. //-----------------------------------------------------------------------
  158. // Summary:
  159. //     This member function is called by the CXTSearchOptionsCtrl class to
  160. //     perform initialization when the window is created or sub-classed.
  161. // Returns:
  162. //     TRUE if the window was successfully initialized, otherwise FALSE.
  163. //-----------------------------------------------------------------------
  164. virtual bool Init();
  165. //{{AFX_CODEJOCK_PRIVATE
  166. DECLARE_MESSAGE_MAP()
  167. //{{AFX_VIRTUAL(CXTSearchOptionsCtrl)
  168. virtual void PreSubclassWindow();
  169. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  170. //}}AFX_VIRTUAL
  171. //{{AFX_MSG(CXTSearchOptionsCtrl)
  172. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  173. afx_msg void OnPaint();
  174. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  175. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  176. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  177. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  178. afx_msg void OnEnable(BOOL bEnable);
  179. //}}AFX_MSG
  180. //}}AFX_CODEJOCK_PRIVATE
  181. protected:
  182. int         m_iMinSize;         // Height of the control when contracted.
  183. int         m_iMaxSize;         // Height of the control when expanded.
  184. bool        m_bExpanded;        // true when the control is expanded.
  185. bool        m_bPreSubclassInit; // true for initialization.
  186. CRect       m_rcLabel;          // Size of the label that is displayed.
  187. CString     m_strExpandLabel;   // Label to display when the control is expanded.
  188. CString     m_strContractLabel; // Label to display when the control is contracted.
  189. CPtrArray   m_arHideCtrls;      // List of controls to show or hide.
  190. CPtrArray   m_arMoveCtrls;      // List of controls to move when expanded or contracted.
  191. };
  192. //////////////////////////////////////////////////////////////////////
  193. AFX_INLINE int CXTSearchOptionsCtrl::GetMinSize() {
  194. return m_iMinSize;
  195. }
  196. AFX_INLINE int CXTSearchOptionsCtrl::GetMaxSize() {
  197. return m_iMaxSize;
  198. }
  199. AFX_INLINE int CXTSearchOptionsCtrl::GetOffsetSize() {
  200. return GetMaxSize()-GetMinSize();
  201. }
  202. AFX_INLINE bool CXTSearchOptionsCtrl::IsExpanded() const {
  203. return m_bExpanded;
  204. }
  205. // forwards
  206. class CXTSearchOptionsCtrl;
  207. //===========================================================================
  208. // Summary:
  209. //     CXTSearchOptionsView is a CFormView derived class. It is to
  210. //     be used with a CXTSearchOptionsCtrl object to paint the background
  211. //     and control background color white. It is also used for resizing
  212. //     and moving children of the form automatically.
  213. //===========================================================================
  214. class _XTP_EXT_CLASS CXTSearchOptionsView : public CFormView
  215. {
  216. DECLARE_DYNAMIC(CXTSearchOptionsView)
  217. private:
  218. // CResizeWnd - private helper class
  219. class CResizeWnd
  220. {
  221. public:
  222. CResizeWnd(CWnd* pWndParent, CWnd* pWndChild, const XT_RESIZEPOINT& ptTopLeft, const XT_RESIZEPOINT& ptTopRight);
  223. virtual ~CResizeWnd();
  224. bool Resize(HDWP& hDWP, float iOffset);
  225. bool IsGroupBox();
  226. CWnd*           m_pWndChild;
  227. CWnd*           m_pWndParent;
  228. CRect           m_rcWindow;
  229. CRect           m_rcParent;
  230. CXTResizeRect   m_rcSizing;
  231. };
  232. private:
  233. // CResizeWndArray - private helper class
  234. typedef CList<CResizeWnd*, CResizeWnd*> CResizeWndArray;
  235. protected:
  236. //-----------------------------------------------------------------------
  237. // Summary:
  238. //     When you create an object of a type derived from CXTSearchOptionsView, invoke one of
  239. //     the constructors to create the view object and identify the dialog resource
  240. //     on which the view is based. You can identify the resource either by name
  241. //     (pass a string as the argument to the constructor) or by its ID (pass an
  242. //     unsigned integer as the argument).
  243. // Parameters:
  244. //     nIDTemplate - Contains the ID number of a dialog-template resource.
  245. //     lpszTemplateName - Contains a null-terminated string that is the name of
  246. //                        a dialog-template resource.
  247. //
  248. //          The form-view window and child controls are not created until CWnd::Create
  249. //          is called. CWnd::Create is called by the framework as part of the document
  250. //          and view creation process, which is driven by the document template.
  251. //-----------------------------------------------------------------------
  252. CXTSearchOptionsView(UINT nIDTemplate);
  253. CXTSearchOptionsView(LPCTSTR lpszTemplateName); // <combine CXTSearchOptionsView::CXTSearchOptionsView@UINT>
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     Destroys a CXTSearchOptionsView object, handles cleanup and deallocation
  257. //-----------------------------------------------------------------------
  258. virtual ~CXTSearchOptionsView();
  259. protected:
  260. //-----------------------------------------------------------------------
  261. // Summary:
  262. //     The SetResize function specifies how much each side of a control will
  263. //     move when the dialog is resized. If a control should be repositioned
  264. //     (e.g. an OK button), all four sides should move by the same amount
  265. //     of pixels as the dialog is resized. If a control should be resized
  266. //     just as much as the dialog (e.g. the list control in the file dialog),
  267. //     the left and top sides should not move, and the right and bottom
  268. //     sides should move by the same amount of pixels as the dialog.
  269. // Parameters:
  270. //     nID        - Specifies the control's ID.
  271. //     ptTopLeft  - How much the top and left sides will move when the dialog is resized.
  272. //     ptTopRight - How much the bottom and right sides will move when the dialog is resized.
  273. //-----------------------------------------------------------------------
  274. void SetResize(int nID, const XT_RESIZEPOINT& ptTopLeft, const XT_RESIZEPOINT& ptTopRight);
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     Call this member function to adjust the scroll sizes for the form view.
  278. // Parameters:
  279. //     pSOCtrl - Points to the CXTSearchOpetionsCtrl object to adjust the scroll
  280. //               sizes for.
  281. //     bAdd    - True to add the size, false to subtract size.
  282. //-----------------------------------------------------------------------
  283. void AdjustScrollSizes(CXTSearchOptionsCtrl* pSOCtrl, bool bAdd);
  284. protected:
  285. //{{AFX_CODEJOCK_PRIVATE
  286. DECLARE_MESSAGE_MAP()
  287. //{{AFX_VIRTUAL(CXTSearchOptionsView)
  288. protected:
  289. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  290. virtual BOOL OnInitDialog();
  291. //}}AFX_VIRTUAL
  292. //{{AFX_MSG(CXTSearchOptionsView)
  293. afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  294. afx_msg void OnSize(UINT nType, int cx, int cy);
  295. //}}AFX_MSG
  296. //}}AFX_CODEJOCK_PRIVATE
  297. protected:
  298. HBRUSH          m_hBrush;      // Handle to the current background brush
  299. CRect           m_rcWindow;    // Original size of the window.
  300. CResizeWndArray m_arResizeWnd; // Array of children to move or resize.
  301. };
  302. #endif // !defined(__XTSEARCHOPTIONSCTRL_H__)