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

对话框与窗口

开发平台:

Visual C++

  1. // XTPControlCustom.h : interface for the CXTPControlCustom class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS 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(__XTPCONTROLCUSTOM_H__)
  22. #define __XTPCONTROLCUSTOM_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "Common/XTPHookManager.h"
  28. #include "XTPControlButton.h"
  29. class CXTPCommandBars;
  30. //-----------------------------------------------------------------------
  31. // Summary:
  32. //     Vertical options enumerator.
  33. // Example:
  34. // <code>
  35. // CXTPControlCustom* pControl = (CXTPControlCustom*)pToolBar->GetControls()->Add(xtpControlCustom, ID_VIEW_LOGO);
  36. // pControl->SetVerticalPositionOption(xtpVerticalShow);
  37. // </code>
  38. // See Also: CXTPControlCustom::SetVerticalPositionOption
  39. //
  40. // <KEYWORDS xtpVerticalHide, xtpVerticalShow, xtpVerticalButton>
  41. //-----------------------------------------------------------------------
  42. enum XTPControlCustomVerticalOptions
  43. {
  44. xtpVerticalHide,  // To hide control if parent toolbar vertically docked.
  45. xtpVerticalShow,  // To show control if parent toolbar vertically docked.
  46. xtpVerticalButton // To show control as button.
  47. };
  48. //===========================================================================
  49. // Summary:
  50. //     CXTPControlCustom is a CXTPControlButton derived class. It represents
  51. //     the control with some child window.
  52. //===========================================================================
  53. class _XTP_EXT_CLASS CXTPControlCustom : public CXTPControlButton, public CXTPHookManagerHookAble
  54. {
  55. public:
  56. //-----------------------------------------------------------------------
  57. // Summary:
  58. //     Constructs a CXTPControlCustom object
  59. //-----------------------------------------------------------------------
  60. CXTPControlCustom();
  61. //-----------------------------------------------------------------------
  62. // Summary:
  63. //     Destroys a CXTPControlCustom object, handles cleanup and deallocation
  64. //-----------------------------------------------------------------------
  65. ~CXTPControlCustom();
  66. public:
  67. //-----------------------------------------------------------------------
  68. // Summary:
  69. //     Call this method to create new CXTPControlCustom object with pWndChild as child window,
  70. // Parameters:
  71. //     pWndChild - Pointer to the child window.
  72. // Returns:
  73. //     Pointer to new CXTPControlCustom object.
  74. //-----------------------------------------------------------------------
  75. static CXTPControlCustom* AFX_CDECL CreateControlCustom(CWnd* pWndChild);
  76. public:
  77. //-----------------------------------------------------------------------
  78. // Summary:
  79. //     Call this method to attach the window to the control.
  80. // Parameters:
  81. //     pWnd - Points to a child CWnd object.
  82. //-----------------------------------------------------------------------
  83. void SetControl(CWnd* pWnd);
  84. //-----------------------------------------------------------------------
  85. // Summary:
  86. //     Call this method to retrieve the child window of the control.
  87. // Returns:
  88. //     A pointer to a CWnd object.
  89. //-----------------------------------------------------------------------
  90. CWnd* GetControl();
  91. //-----------------------------------------------------------------------
  92. // Summary:
  93. //     This method sets the child window size.
  94. // Parameters:
  95. //     szControl - Size of the child window.
  96. //-----------------------------------------------------------------------
  97. void SetSize(CSize szControl);
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     This method sets the margins of the child window.
  101. // Parameters:
  102. //     cxRight - Right border gap.
  103. //     cxTop - Top border gap.
  104. //     cxLeft - Left border gap.
  105. //     cxBottom - Bottom border gap.
  106. //-----------------------------------------------------------------------
  107. void SetBorders(int cxRight, int cxTop, int cxLeft, int cxBottom);
  108. //-----------------------------------------------------------------------
  109. // Summary:
  110. //     Call this method to set vertical options to the control.
  111. // Parameters:
  112. //     options - XTPControlCustomVerticalOptions type to be set
  113. //               Can be any of the values listed in the Remarks section.
  114. // Remarks:
  115. //     Vertical options refer to how the control will be displayed
  116. //     when the toolbar it docked vertically. It can be one of the following:
  117. //     * <b>xtpVerticalHide</b> To hide control
  118. //     * <b>xtpVerticalShow</b> To show control
  119. //     * <b>xtpVerticalButton</b> To show control as button.
  120. // See Also: XTPControlCustomVerticalOptions
  121. //-----------------------------------------------------------------------
  122. void SetVerticalPositionOption(XTPControlCustomVerticalOptions options);
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Call this member to enable or disable the control.
  126. //     If the control does not have flags xtpFlagManualUpdate, you must call
  127. //     the Enable member of CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  128. // Parameters:
  129. //     bEnabled - TRUE if the control is enabled.
  130. // See Also: GetEnabled, SetChecked
  131. //-----------------------------------------------------------------------
  132. virtual void SetEnabled(BOOL bEnabled);
  133. protected:
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     Call this member to set the bounding rectangle of the control.
  137. // Parameters:
  138. //     rcControl - Bounding rectangle of the control.
  139. //-----------------------------------------------------------------------
  140. virtual void SetRect(CRect rcControl);
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     This method is called to determine the size of the control.
  144. // Parameters:
  145. //     pDC - Pointer to a valid device context
  146. // Returns:
  147. //     Size of the control.
  148. //-----------------------------------------------------------------------
  149. virtual CSize GetSize(CDC* pDC);
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     This method is called to draw the control.
  153. // Parameters:
  154. //     pDC - Pointer to a valid device context.
  155. //-----------------------------------------------------------------------
  156. virtual void Draw(CDC* pDC);
  157. //-----------------------------------------------------------------------
  158. // Summary:
  159. //     This method is called to hide the control.
  160. // Parameters:
  161. //     dwFlags - Reasons to hide.
  162. // See Also: XTPControlHideFlags
  163. //-----------------------------------------------------------------------
  164. virtual void SetHideFlags(DWORD dwFlags);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     This method is called when action property was changed
  168. // Parameters:
  169. //     nProperty - Property of the action
  170. // See Also: OnActionChanging
  171. //-----------------------------------------------------------------------
  172. virtual void OnActionChanged(int nProperty);
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     This method is called before recalculating the parent command
  176. //     bar size to calculate the dimensions of the control.
  177. // Parameters:
  178. //     dwMode - Flags used to determine the height and width of the
  179. //              dynamic command bar. See Remarks section for a list of
  180. //              values.
  181. // Remarks:
  182. //     The following predefined flags are used to determine the height and
  183. //     width of the dynamic command bar. Use the bitwise-OR (|) operator to
  184. //     combine the flags.<p/>
  185. //
  186. //     * <b>LM_STRETCH</b> Indicates whether the command bar should be
  187. //                stretched to the size of the frame. Set if the bar is
  188. //                not a docking bar (not available for docking). Not set
  189. //                when the bar is docked or floating (available for
  190. //                docking). If set, LM_STRETCH returns dimensions based
  191. //                on the LM_HORZ state. LM_STRETCH works similarly to
  192. //                the the bStretch parameter used in CalcFixedLayout;
  193. //                see that member function for more information about
  194. //                the relationship between stretching and orientation.
  195. //     * <b>LM_HORZ</b> Indicates that the bar is horizontally or
  196. //                vertically oriented. Set if the bar is horizontally
  197. //                oriented, and if it is vertically oriented, it is not
  198. //                set. LM_HORZ works similarly to the the bHorz
  199. //                parameter used in CalcFixedLayout; see that member
  200. //                function for more information about the relationship
  201. //                between stretching and orientation.
  202. //     * <b>LM_MRUWIDTH</b> Most Recently Used Dynamic Width. Uses the
  203. //                remembered most recently used width.
  204. //     * <b>LM_HORZDOCK</b> Horizontal Docked Dimensions. Returns the
  205. //                dynamic size with the largest width.
  206. //     * <b>LM_VERTDOCK</b> Vertical Docked Dimensions. Returns the dynamic
  207. //                size with the largest height.
  208. //     * <b>LM_COMMIT</b> Resets LM_MRUWIDTH to current width of
  209. //                floating command bar.
  210. //
  211. //     The framework calls this member function to calculate the dimensions
  212. //     of a dynamic command bar.<p/>
  213. //
  214. //     Override this member function to provide your own layout in classes
  215. //     you derive from CXTPControl. XTP classes derived from CXTPControl,
  216. //     such as CXTPControlComboBox, override this member function to provide
  217. //     their own implementation.
  218. // See Also:
  219. //     CXTPControlComboBox, CXTPControl, CXTPControlEdit,
  220. //     CXTPControlWindowList, CXTPControlWorkspaceActions, CXTPControlToolbars,
  221. //     CXTPControlOleItems, CXTPControlRecentFileList, CXTPControlSelector,
  222. //     CXTPControlListBox
  223. //-----------------------------------------------------------------------
  224. virtual void OnCalcDynamicSize(DWORD dwMode);
  225. //-----------------------------------------------------------------------
  226. // Summary:
  227. //     Reads or writes this object from or to an archive.
  228. // Parameters:
  229. //     pPX - A CXTPPropExchange object to serialize to or from.
  230. //----------------------------------------------------------------------
  231. virtual void DoPropExchange(CXTPPropExchange* pPX);
  232. //-----------------------------------------------------------------------
  233. // Summary:
  234. //     This method is called to copy the control.
  235. // Parameters:
  236. //     pControl - Points to a source CXTPControl object
  237. //     bRecursive - TRUE to copy recursively.
  238. //-----------------------------------------------------------------------
  239. virtual void Copy(CXTPControl* pControl, BOOL bRecursive = FALSE);
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     This method is called when the user clicks the control.
  243. // Parameters:
  244. //     bKeyboard - TRUE if the control is selected using the keyboard.
  245. //     pt - Mouse cursor position.
  246. //-----------------------------------------------------------------------
  247. virtual void OnClick(BOOL bKeyboard = FALSE, CPoint pt = CPoint(0, 0));
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Call this method to check if the user can drop the control.
  251. // Parameters:
  252. //     pCommandBar - Points to a CXTPCommandBar object
  253. //     point - Mouse position.
  254. //     dropEffect - DROPEFFECT enumerator.
  255. // Returns:
  256. //     TRUE if successful, otherwise returns FALSE
  257. //-----------------------------------------------------------------------
  258. virtual BOOL IsCustomizeDragOverAvail(CXTPCommandBar* pCommandBar, CPoint point, DROPEFFECT& dropEffect);
  259. //-----------------------------------------------------------------------
  260. // Summary:
  261. //     This member function is called by WindowProc, or is called
  262. //     during message reflection.
  263. // Parameters:
  264. //     hWnd     - Window handle that the message belongs to.
  265. //     nMessage - Specifies the message to be sent.
  266. //     wParam   - Specifies additional message-dependent information.
  267. //     lParam   - Specifies additional message-dependent information.
  268. //     lResult  - The return value of WindowProc. Depends on the message;
  269. //                may be NULL.
  270. //-----------------------------------------------------------------------
  271. int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  272. //-------------------------------------------------------------------------
  273. // Summary:
  274. //     This method is called when control was removed from parent controls collection
  275. //-------------------------------------------------------------------------
  276. virtual void OnRemoved();
  277. private:
  278. CWnd* FindChildWindow(CXTPCommandBars* pCommandBars, UINT nID);
  279. void ShowHideChildControl();
  280. protected:
  281. HWND m_hwndControl;                                 // The child window.
  282. CRect m_rcBorders;                                  // Borders.
  283. BOOL  m_bControlVisible;                            // TRUE if child window is visible.
  284. CSize m_szControl;                                  // Size of the control.
  285. XTPControlCustomVerticalOptions m_verticalOptions;  // Vertical options.
  286. int   m_nControlID;                                 // Id of the custom control
  287. public:
  288. DECLARE_XTP_CONTROL(CXTPControlCustom)
  289. };
  290. #endif // #if !defined(__XTPCONTROLCUSTOM_H__)