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

对话框与窗口

开发平台:

Visual C++

  1. // XTPControls.h : interface for the CXTPControls 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(__XTPCONTROLS_H__)
  22. #define __XTPCONTROLS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPCommandBarsDefines.h"
  28. class CXTPCommandBar;
  29. class CXTPControl;
  30. class CXTPCommandBars;
  31. class CXTPCommandBarList;
  32. class CXTPPropExchange;
  33. struct XTP_COMMANDBARS_PROPEXCHANGE_PARAM;
  34. class CXTPOriginalControls;
  35. //===========================================================================
  36. // Summary:
  37. //     CXTPControls is a CCmdTarget derived class. It represents a collection
  38. //     of the controls.
  39. //===========================================================================
  40. class _XTP_EXT_CLASS CXTPControls : public CXTPCmdTarget
  41. {
  42. DECLARE_DYNCREATE(CXTPControls)
  43. private:
  44. struct XTPBUTTONINFO;       // Internal helper structure.
  45. public:
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     Protected constructor used by dynamic creation
  49. //-----------------------------------------------------------------------
  50. CXTPControls();
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //     Destroys a CXTPControls object, handles cleanup and deallocation
  54. //-----------------------------------------------------------------------
  55. virtual ~CXTPControls();
  56. public:
  57. //-----------------------------------------------------------------------
  58. // Summary:
  59. //     Call this member to return the control at the specified index.
  60. // Parameters:
  61. //     nIndex - An integer index.
  62. // Returns:
  63. //     The CXTPControl pointer currently at this index.
  64. //-----------------------------------------------------------------------
  65. CXTPControl* GetAt(int nIndex) const;
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     This member function returns the index of the first control, starting
  69. //     at position 0, whose command ID matches nIDFind.
  70. // Parameters:
  71. //     nIDFind - Command ID of the control to find.
  72. // Returns:
  73. //     The index of the control, or -1 if no control has the given command ID.
  74. //-----------------------------------------------------------------------
  75. int CommandToIndex(int nIDFind) const;
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //     Call this member to add a new control.
  79. // Parameters:
  80. //     pControl     - A pointer to the control to be added.
  81. //     controlType  - The type of the control to be added.
  82. //     nId          - Identifier of the control to be added.
  83. //     lpszParameter - Parameter of the control to be added.
  84. //     nBefore      - Index of the control to be inserted.
  85. //     bTemporary   - TRUE if this control is temporary.
  86. // Returns:
  87. //     A pointer to the added control.
  88. //-----------------------------------------------------------------------
  89. CXTPControl* Add(CXTPControl* pControl, int nId, LPCTSTR lpszParameter = NULL, int nBefore = -1, BOOL bTemporary = FALSE);
  90. CXTPControl* Add(XTPControlType controlType, int nId, LPCTSTR lpszParameter = NULL, int nBefore = -1, BOOL bTemporary = FALSE); //<combine CXTPControls::Add@CXTPControl*@int@LPCTSTR@int@BOOL>
  91. CXTPControl* Add(CXTPControl* pControl);//<combine CXTPControls::Add@CXTPControl*@int@LPCTSTR@int@BOOL>
  92. //-----------------------------------------------------------------------
  93. // Summary:
  94. //     Call this member to insert a new control.
  95. // Parameters:
  96. //     pControl -  A pointer to the control to be added.
  97. //     nBefore - Index of the control to be inserted.
  98. // Returns:
  99. //     A pointer to the added control.
  100. // See Also: Add
  101. //-----------------------------------------------------------------------
  102. CXTPControl* InsertAt(CXTPControl* pControl, int nBefore);
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Call this member to add a new control.
  106. // Parameters:
  107. //     pMenu  - Menu that contains the control.
  108. //     nIndex - Index of the control to be added.
  109. // Returns:
  110. //     Pointer to the added control.
  111. //-----------------------------------------------------------------------
  112. CXTPControl* AddMenuItem(CMenu* pMenu, int nIndex);
  113. //-----------------------------------------------------------------------
  114. // Summary:
  115. //     Call this member to remove a control.
  116. // Parameters:
  117. //     nIndex - Index of the control to be removed.
  118. //     pControl - Control to be removed.
  119. //-----------------------------------------------------------------------
  120. virtual void Remove(CXTPControl* pControl);
  121. void Remove(int nIndex); // <combine CXTPControls::Remove@CXTPControl*>
  122. //-----------------------------------------------------------------------
  123. // Summary:
  124. //     Call this member to remove all controls.
  125. //-----------------------------------------------------------------------
  126. void RemoveAll();
  127. //-----------------------------------------------------------------------
  128. // Summary:
  129. //     Call this member to get the count of the controls
  130. // Returns:
  131. //     The count of the controls.
  132. //-----------------------------------------------------------------------
  133. int GetCount() const;
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     Call this member to find the specified control.
  137. // Parameters:
  138. //     type       - The type of the control to find.
  139. //     nId        - The control's identifier.
  140. //     bVisible   - TRUE if the control is visible.
  141. //     bRecursive - TRUE to find in the nested command bars.
  142. // Returns:
  143. //     Pointer to the CXTPControl object if successful; otherwise returns NULL.
  144. //-----------------------------------------------------------------------
  145. CXTPControl* FindControl(int nId) const;
  146. CXTPControl* FindControl(XTPControlType type, int nId, BOOL bVisible, BOOL bRecursive) const; //<combine CXTPControls::FindControl@int@const>
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Call this member to convert menu items to command bar controls.
  150. // Parameters:
  151. //     pMenu           - Menu to be converted.
  152. // Returns:
  153. //     TRUE if the method was successful; otherwise FALSE.
  154. //-----------------------------------------------------------------------
  155. BOOL LoadMenu(CMenu* pMenu);
  156. public:
  157. //-----------------------------------------------------------------------
  158. // Summary:
  159. //     Call this member to retrieve the first control.
  160. // Returns:
  161. //     A pointer to a CXTPControl object
  162. //-----------------------------------------------------------------------
  163. CXTPControl* GetFirst() const;
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Finds the next control in the given direction.
  167. // Parameters:
  168. //     nIndex - Current control index.
  169. //     nDirection - Direction to find.
  170. //     bKeyboard - TRUE to skip controls with xtpFlagSkipFocus flag.
  171. //     bSkipTemporary - TRUE to skip all controls with Temporary flag
  172. //     bSkipCollapsed - TRUE to skip all controls  with xtpHideExpand hide flag.
  173. //     pControl - Receives a pointer to the next control.
  174. // Returns:
  175. //     Index of the next control.
  176. //-----------------------------------------------------------------------
  177. void GetNext(CXTPControl*& pControl) const;
  178. long GetNext(long nIndex, int nDirection = +1, BOOL bKeyboard = TRUE, BOOL bSkipTemporary = FALSE, BOOL bSkipCollapsed = TRUE) const; //<combine CXTPControls::GetNext@CXTPControl*&@const>
  179. //-----------------------------------------------------------------------
  180. // Summary:
  181. //     This method determines where a point lies in a specified control.
  182. // Parameters:
  183. //     point - Specifies the point to be tested.
  184. // Returns:
  185. //     A pointer to a CXTPControl control that occupies the specified
  186. //     point or NULL if no control occupies the point.
  187. //-----------------------------------------------------------------------
  188. CXTPControl* HitTest(CPoint point) const;
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Call this member to change the type of the control.
  192. // Parameters:
  193. //     pControl - Points to a CXTPControl object
  194. //     nIndex - Index of the control
  195. //     type - Type needed to be changed.
  196. // Returns:
  197. //     A pointer to a CXTPControl object
  198. //-----------------------------------------------------------------------
  199. CXTPControl* SetControlType(CXTPControl* pControl, XTPControlType type);
  200. CXTPControl* SetControlType(int nIndex, XTPControlType type); // <combine CXTPControls::SetControlType@CXTPControl*@XTPControlType>
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Call this member to add the copy of the control.
  204. // Parameters:
  205. //     pClone - Points to a CXTPControl object needed to copy.
  206. //     nBefore - Index of the control to be inserted.
  207. //     bRecursive - TRUE to copy recursively.
  208. // Returns:
  209. //     A pointer to an added CXTPControl object
  210. //-----------------------------------------------------------------------
  211. CXTPControl* AddClone(CXTPControl* pClone, int nBefore = -1, BOOL bRecursive = FALSE);
  212. //-----------------------------------------------------------------------
  213. // Summary:
  214. //     This method is called internally to reposition controls and
  215. //     determine their size.
  216. // Parameters:
  217. //     pDC      - Pointer to a valid device context
  218. //     nLength  - Length of the parent bar.
  219. //     dwMode   - Mode of the parent bar.
  220. //     rcBorder - Borders of commandbar.
  221. //     nWidth   - Width of the parent bar.
  222. // Returns:
  223. //     Total size of the controls.
  224. //-----------------------------------------------------------------------
  225. CSize CalcDynamicSize(CDC* pDC, int nLength, DWORD dwMode, const CRect& rcBorder, int nWidth = 0);
  226. //-----------------------------------------------------------------------
  227. // Summary:
  228. //     This method is called internally to reposition controls and
  229. //     determine their size for popup bar.
  230. // Parameters:
  231. //     pDC      - Pointer to a valid device context
  232. //     nLength  - Length of the parent bar.
  233. //     rcBorder - Borders of popup bar.
  234. // Returns:
  235. //     Total size of the controls.
  236. // See Also: CalcDynamicSize
  237. //-----------------------------------------------------------------------
  238. CSize CalcPopupSize(CDC* pDC, int nLength, int nWidth, const CRect& rcBorder);
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Call this member to get the number of visible controls.
  242. // Parameters:
  243. //     bIgnoreWrap - TRUE to ignore controls that are wrapped.
  244. // Returns:
  245. //     Number of visible controls.
  246. //-----------------------------------------------------------------------
  247. int GetVisibleCount(BOOL bIgnoreWrap = FALSE) const;
  248. CXTPControl* GetVisibleAt(int nIndex, BOOL bIgnoreWraps = FALSE) const;
  249. //-----------------------------------------------------------------------
  250. // Summary:
  251. //     Call this member to attach the specified command bars object.
  252. // Parameters:
  253. //     pCommandBars - Command bars object need to attach.
  254. // Remarks:
  255. //     You can call this member if you create plain toolbar and want to set CommandBars for it.
  256. //-----------------------------------------------------------------------
  257. void SetCommandBars(CXTPCommandBars* pCommandBars);
  258. //-----------------------------------------------------------------------
  259. // Summary:
  260. //     Makes a copy of all controls.
  261. // Parameters:
  262. //     bRecursive - TRUE to copy recursively.
  263. // Returns:
  264. //     A pointer to a CXTPControls object.
  265. //-----------------------------------------------------------------------
  266. CXTPControls* Duplicate(BOOL bRecursive = FALSE);
  267. virtual void Copy(CXTPControls* pControls, BOOL bRecursive = FALSE);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Retrieves the parent command bars object.
  271. // Returns:
  272. //     A pointer to a CXTPCommandBars object
  273. //-----------------------------------------------------------------------
  274. CXTPCommandBars* GetCommandBars() const;
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     Move the control to a specified position.
  278. // Parameters:
  279. //     pControl - Points to a CXTPControl object
  280. //     nBefore  - Index to be moved.
  281. //-----------------------------------------------------------------------
  282. void MoveBefore(CXTPControl* pControl, int nBefore);
  283. //-----------------------------------------------------------------------
  284. // Summary:
  285. //     Attaches the parent command bar.
  286. // Parameters:
  287. //     pParent - Points to a CXTPCommandBar object
  288. //-----------------------------------------------------------------------
  289. void SetParent(CXTPCommandBar* pParent);
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     Creates original controls set.
  293. //-----------------------------------------------------------------------
  294. void CreateOriginalControls();
  295. //-----------------------------------------------------------------------
  296. // Summary:
  297. //     Removes the original controls set.
  298. //-----------------------------------------------------------------------
  299. void ClearOriginalControls();
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     Retrieves original controls set.
  303. // Returns:
  304. //     A pointer to a CXTPControls object
  305. //-----------------------------------------------------------------------
  306. CXTPOriginalControls* GetOriginalControls() const;
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //     Call this method to assign original controls
  310. // Parameters:
  311. //     pControls - A pointer to a CXTPControls object to assign
  312. //-----------------------------------------------------------------------
  313. void SetOriginalControls(CXTPOriginalControls* pControls);
  314. //-----------------------------------------------------------------------
  315. // Summary:
  316. //     Call this member to compare the controls.
  317. // Parameters:
  318. //     pControls - Points to a CXTPControls object
  319. // Returns:
  320. //     TRUE if the controls are identical.
  321. //-----------------------------------------------------------------------
  322. BOOL Compare(const CXTPControls* pControls);
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //     Returns the changed status flag of the control.
  326. // Returns:
  327. //     TRUE if the internal control state was changed since last drawing,
  328. //     FALSE otherwise.
  329. //-----------------------------------------------------------------------
  330. BOOL IsChanged() const;
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     Reads or writes this object from or to an archive.
  334. // Parameters:
  335. //     pPX - A CXTPPropExchange object to serialize to or from.
  336. //----------------------------------------------------------------------
  337. virtual void DoPropExchange(CXTPPropExchange* pPX);
  338. virtual BOOL ShouldSerializeControl(CXTPControl* pControl);
  339. //-----------------------------------------------------------------------
  340. // Summary:
  341. //     Call this member to get the parent command bar.
  342. // Returns:
  343. //     The parent command bar object.
  344. //-----------------------------------------------------------------------
  345. CXTPCommandBar* GetParent() const;
  346. BOOL IsOriginalControls() const;
  347. protected:
  348. //-----------------------------------------------------------------------
  349. // Summary:
  350. //     This method is called when control is added to collection
  351. // Parameters:
  352. //     pControl - control that added to collection
  353. virtual void OnControlAdded(CXTPControl* pControl);
  354. //-----------------------------------------------------------------------
  355. // Summary:
  356. //     This method is called when control is removed from collection
  357. // Parameters:
  358. //     pControl - control that removed from collection
  359. //-----------------------------------------------------------------------
  360. virtual void OnControlRemoved(CXTPControl* pControl);
  361. //-----------------------------------------------------------------------
  362. // Summary:
  363. //     This method is called when control is about to be removed from collection
  364. // Parameters:
  365. //     pControl - control that removed from collection
  366. // Returns: TRUE to cancel removing controls
  367. //-----------------------------------------------------------------------
  368. virtual BOOL OnControlRemoving(CXTPControl* pControl);
  369. //{{AFX_CODEJOCK_PRIVATE
  370. protected:
  371. virtual void RefreshIndexes();
  372. protected:
  373. void GenerateCommandBarList(DWORD& nID, CXTPCommandBarList* pCommandBarList, XTP_COMMANDBARS_PROPEXCHANGE_PARAM* pParam);
  374. void RestoreCommandBarList(CXTPCommandBarList* pCommandBarList);
  375. CSize _CalcSize(XTPBUTTONINFO* pData, BOOL bVert);
  376. int _WrapToolBar(XTPBUTTONINFO* pData, int nWidth, DWORD& dwMode);
  377. void _SizeFloatableBar(XTPBUTTONINFO* pData, int nLength, DWORD dwMode);
  378. void _AdjustBorders(XTPBUTTONINFO* pData, CSize& sizeResult, DWORD dwMode, CRect rcBorder);
  379. void _CenterControlsInRow(XTPBUTTONINFO* pData, int nFirst, int nLast, int, BOOL, CSize sizeResult, CRect);
  380. void _MoveRightAlligned(XTPBUTTONINFO* pData, CSize sizeResult, CRect rcBorder, DWORD dwMode);
  381. void  _SizePopupToolBar(XTPBUTTONINFO* pData, DWORD dwMode);
  382. CSize _CalcSmartLayoutToolBar(CDC* pDC, XTPBUTTONINFO* pData, DWORD& dwMode);
  383. CSize _WrapSmartLayoutToolBar(CDC* pDC, XTPBUTTONINFO* pData, int nWidth, DWORD& dwMode);
  384. CSize _ReduceSmartLayoutToolBar(CDC* pDC, XTPBUTTONINFO* pData, int nWidth, DWORD& dwMode);
  385. void _MakeSameWidth(int nStart, int nLast, int nWidth);
  386. //}}AFX_CODEJOCK_PRIVATE
  387. protected:
  388. CXTPCommandBar* m_pParent;                          // Parent Command Bar
  389. CArray<CXTPControl*, CXTPControl*> m_arrControls;   // Collection of controls
  390. CXTPCommandBars* m_pCommandBars;                    // Parent Command Bars
  391. CXTPOriginalControls* m_pOriginalControls;          // Original controls collection.
  392. BOOL m_bOriginalControls;
  393. friend class CXTPCommandBar;
  394. friend class CXTPCommandBars;
  395. friend class CXTPToolBar;
  396. friend class CXTPMenuBar;
  397. friend class CXTPRibbonBar;
  398. };
  399. class _XTP_EXT_CLASS CXTPOriginalControls : public CXTPControls
  400. {
  401. DECLARE_DYNCREATE(CXTPOriginalControls)
  402. public:
  403. CXTPOriginalControls();
  404. friend class CXTPControls;
  405. };
  406. //////////////////////////////////////////////////////////////////////////
  407. AFX_INLINE CXTPControl* CXTPControls::GetAt(int nIndex) const {
  408. ASSERT(nIndex < m_arrControls.GetSize());
  409. return (nIndex >= 0 && nIndex < m_arrControls.GetSize()) ? m_arrControls.GetAt(nIndex) : NULL;
  410. }
  411. AFX_INLINE int CXTPControls::GetCount() const {
  412. return (int)m_arrControls.GetSize();
  413. }
  414. AFX_INLINE CXTPOriginalControls* CXTPControls::GetOriginalControls() const {
  415. return m_pOriginalControls;
  416. }
  417. AFX_INLINE CXTPCommandBar* CXTPControls::GetParent() const {
  418. return m_pParent;
  419. }
  420. AFX_INLINE BOOL CXTPControls::IsOriginalControls() const {
  421. return m_bOriginalControls;
  422. }
  423. #endif // #if !defined(__XTPCONTROLS_H__)