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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMenuBar.h : interface for the CXTPMenuBar 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(__XTPMENUBAR_H__)
  22. #define __XTPMENUBAR_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPToolBar.h"
  28. #include "XTPCommandBarsDefines.h"
  29. #define XTP_IDR_MENUBAR                 1
  30. class CXTPCommandBars;
  31. //===========================================================================
  32. // Summary:
  33. //     CXTPMenuBarMDIMenuInfo structure used to describe parameters of application MDI menus.
  34. //===========================================================================
  35. class CXTPMenuBarMDIMenuInfo : public CXTPCmdTarget
  36. {
  37. public:
  38. CXTPMenuBarMDIMenuInfo(CXTPCommandBars* pCommandBars, UINT nIDResource);
  39. ~CXTPMenuBarMDIMenuInfo();
  40. public:
  41. CXTPControls* m_pControls;  // Menu controls
  42. CString m_strTitle;         // Title of MDI menu
  43. CString m_strDescription;   // Description of MDI menu
  44. HICON m_hIcon;              // Menu Icon
  45. UINT m_nIDResource;         // Template identifier
  46. BOOL m_bChanged;            // TRUE if menu was changed.
  47. };
  48. class CXTPMenuBar;
  49. //===========================================================================
  50. // Summary:
  51. //     CXTPMenuBarMDIMenus represents collection of MDI menus for CXTPMenuBar
  52. //===========================================================================
  53. class _XTP_EXT_CLASS CXTPMenuBarMDIMenus : public CXTPCmdTarget
  54. {
  55. public:
  56. //-----------------------------------------------------------------------
  57. // Summary:
  58. //     Constructs a CXTPMenuBarMDIMenus object.
  59. // Parameters:
  60. //     pMenuBar - Parent CXTPMenuBar
  61. //-----------------------------------------------------------------------
  62. CXTPMenuBarMDIMenus(CXTPMenuBar* pMenuBar);
  63. //-------------------------------------------------------------------------
  64. // Summary:
  65. //     Destroys a CXTPMenuBarMDIMenus object, handles clean up and deallocation
  66. //-------------------------------------------------------------------------
  67. ~CXTPMenuBarMDIMenus();
  68. public:
  69. //-------------------------------------------------------------------------
  70. // Summary:
  71. //     Returns number of MDI menus in collection
  72. //-------------------------------------------------------------------------
  73. int GetCount() const;
  74. //{{AFX_CODEJOCK_PRIVATE
  75. void SetAt(UINT nIDResource, CXTPMenuBarMDIMenuInfo* pInfo);
  76. CXTPMenuBarMDIMenuInfo* Lookup(UINT nIDResource) const;
  77. void Remove(UINT nIDResource);
  78. void RemoveAll();
  79. POSITION GetStartPosition() const;
  80. void GetNextMenu(POSITION& pos, CXTPMenuBarMDIMenuInfo*& pInfo) const;
  81. //}}AFX_CODEJOCK_PRIVATE
  82. protected:
  83. CMap<UINT, UINT, CXTPMenuBarMDIMenuInfo*, CXTPMenuBarMDIMenuInfo*> m_mapMenus;          // Menu map
  84. CXTPMenuBar* m_pMenuBar;            // Parent Menu Bar
  85. };
  86. //===========================================================================
  87. // Summary:
  88. //     CXTPMenuBar is a CXTPToolBar derived class. It represents menu bar of frame window.
  89. //===========================================================================
  90. class _XTP_EXT_CLASS CXTPMenuBar : public CXTPToolBar
  91. {
  92. public:
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Constructs a CXTPMenuBar object
  96. //-----------------------------------------------------------------------
  97. CXTPMenuBar();
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Destroys a CXTPMenuBar object, handles cleanup and deallocation
  101. //-----------------------------------------------------------------------
  102. ~CXTPMenuBar();
  103. public:
  104. //-----------------------------------------------------------------------
  105. // Summary:
  106. //     Loads the menu from resource.
  107. // Parameters:
  108. //     nIDResource - Menu identifier to load.
  109. // Returns:
  110. //     TRUE if successful; otherwise returns FALSE
  111. //-----------------------------------------------------------------------
  112. virtual BOOL LoadMenuBar(UINT nIDResource);
  113. //------------------------------------------------------------------------
  114. // Summary:
  115. //     Destroy all MDI menus.
  116. //------------------------------------------------------------------------
  117. void FreeMDIMenus();
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     This member function will refresh the menus
  121. //-----------------------------------------------------------------------
  122. void RefreshMenu();
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Call this method to retrieve identifier of currently visible menu
  126. //-----------------------------------------------------------------------
  127. UINT GetCurrentMenuResource() const;
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //     Call this method to retrieve identifier of default menu
  131. //-----------------------------------------------------------------------
  132. UINT GetDefaultMenuResource() const;
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     Retrieves collection of application MDI menus
  136. //-----------------------------------------------------------------------
  137. CXTPMenuBarMDIMenus* GetMDIMenus() const;
  138. //-----------------------------------------------------------------------
  139. // Summary: This method is called to switch to MDI menu from MDI menus collection
  140. // Parameters:
  141. //     nIDMenu - Menu identifier to switch
  142. //     pMenu - Menu to switch
  143. // See Also: SwitchActiveMenu
  144. //-----------------------------------------------------------------------
  145. virtual void SwitchMDIMenu(UINT nIDMenu, CMenu* pMenu = NULL);
  146. //-----------------------------------------------------------------------
  147. // Summary:
  148. //     Call this method to manually load MDI menu in application initialization
  149. // Parameters:
  150. //     nIDResource - Template identifier
  151. //-----------------------------------------------------------------------
  152. CXTPMenuBarMDIMenuInfo* AddMDIMenu(UINT nIDResource);
  153. //-------------------------------------------------------------------------
  154. // Summary:
  155. //     This method is called to switch menu to active document menu.
  156. // See Also: GetActiveDocTemplate, SwitchMDIMenu
  157. //-------------------------------------------------------------------------
  158. void SwitchActiveMenu();
  159. protected:
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //     This member function is called by WindowProc, or is called during
  163. //     message reflection.
  164. // Parameters:
  165. //     hWnd     - Window handle message belongs to.
  166. //     nMessage - Specifies the message to be sent.
  167. //     wParam   - Specifies additional message-dependent information.
  168. //     lParam   - Specifies additional message-dependent information.
  169. //     lResult  - The return value of WindowProc. Depends on the message;
  170. //                may be NULL.
  171. //-----------------------------------------------------------------------
  172. int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     Resets the controls to their original state.
  176. // Parameters:
  177. //     bShowWarningMessage - TRUE to show warning message
  178. //-----------------------------------------------------------------------
  179. virtual void Reset(BOOL bShowWarningMessage);
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     Reads or writes this object from or to an archive.
  183. // Parameters:
  184. //     pPX - A CXTPPropExchange object to serialize to or from.
  185. //----------------------------------------------------------------------
  186. void DoPropExchange(CXTPPropExchange* pPX);
  187. //-----------------------------------------------------------------------
  188. // Summary:
  189. //     This method makes a copy of the command bar.
  190. // Parameters:
  191. //     pCommandBar - Command bar needed to be copied.
  192. //     bRecursive - TRUE to copy recursively.
  193. //-----------------------------------------------------------------------
  194. virtual void Copy(CXTPCommandBar* pCommandBar, BOOL bRecursive = FALSE);
  195. protected:
  196. //-------------------------------------------------------------------------
  197. // Summary:
  198. //     This method is called create hooks for main window .
  199. //-------------------------------------------------------------------------
  200. void SetupHook();
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Retrieves active MDI child window handle
  204. // Parameters:
  205. //     bMaximized -  If this parameter is not NULL, it is a pointer to a value that indicates the maximized state of the MDI child window.
  206. // Returns:
  207. //     The return value is the handle to the active MDI child window.
  208. //-----------------------------------------------------------------------
  209. HWND GetActiveMdiChildWnd(BOOL* bMaximized = NULL);
  210. //-------------------------------------------------------------------------
  211. // Summary:
  212. //     This method is called to update active mdi window hooks.
  213. //-------------------------------------------------------------------------
  214. void SyncActiveMdiChild();
  215. //-------------------------------------------------------------------------
  216. // Summary:
  217. //     This method is called to update system buttons of menu bar.
  218. //-------------------------------------------------------------------------
  219. virtual void RefreshSysButtons();
  220. //-----------------------------------------------------------------------
  221. // Summary:
  222. //     This method is called to switch current MDI menu.
  223. // Parameters:
  224. //     hMenu - Active menu need to select.
  225. //-----------------------------------------------------------------------
  226. void SwitchMDIMenu(HMENU hMenu);
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     This method is called to assign self identifiers for serialization process.
  230. // Parameters:
  231. //     nID             - Identifier to assign
  232. //     pCommandBarList - List of CommandBars.
  233. //     pParam          - Address of a XTP_COMMANDBARS_PROPEXCHANGE_PARAM structure.
  234. //-----------------------------------------------------------------------
  235. void GenerateCommandBarList(DWORD& nID, CXTPCommandBarList* pCommandBarList, XTP_COMMANDBARS_PROPEXCHANGE_PARAM* pParam);
  236. //-----------------------------------------------------------------------
  237. // Summary:
  238. //     This method is called in serialization process.to restore popups from list of command bars.
  239. // Parameters:
  240. //     pCommandBarList - List of CommandBars.
  241. //-----------------------------------------------------------------------
  242. void RestoreCommandBarList(CXTPCommandBarList* pCommandBarList);
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //     This method is called to check if Toolbar was changed and have to be saved
  246. // Returns:
  247. //     TRUE if toolbar have to be saved
  248. //-----------------------------------------------------------------------
  249. BOOL ShouldSerializeBar();
  250. protected:
  251. //{{AFX_CODEJOCK_PRIVATE
  252. DECLARE_MESSAGE_MAP()
  253. //{{AFX_MSG(CXTPMenuBar)
  254. afx_msg void OnTimer(UINT_PTR nIDEvent);
  255. //}}AFX_MSG
  256. //}}AFX_CODEJOCK_PRIVATE
  257. private:
  258. void AddSysButton(CXTPControl* pControl, int nId, LPCTSTR lpszParameter, int nBefore = -1);
  259. BOOL IsMDIMenusChanged();
  260. BOOL IsOleDocumentActive(HWND hWndActiveChild) const;
  261. protected:
  262. BOOL m_bMdiApp;             // TRUE if parent frame is CMDIFrameWnd derived.
  263. HWND m_hWndActiveChild;     // Active MDI window handle.
  264. HMENU m_hMenuDefault;       // Default menu handle.
  265. UINT m_nIDResource;         // Resource of default menu.
  266. UINT m_nIDResourceCurrent;  // Currently active menu.
  267. CXTPMenuBarMDIMenus* m_pMDIMenus;   // MDI menus.
  268. private:
  269. BOOL m_bDirtyMenu;
  270. private:
  271. DECLARE_XTP_COMMANDBAR(CXTPMenuBar)
  272. class CControlMDIButton;
  273. class CControlMDISysMenuPopup;
  274. friend class CXTPCommandBars;
  275. friend class CControlMDIButton;
  276. friend class CCommandBarsSite;
  277. friend class CCommandBarsCtrl;
  278. };
  279. AFX_INLINE UINT CXTPMenuBar::GetCurrentMenuResource() const {
  280. return m_nIDResourceCurrent;
  281. }
  282. AFX_INLINE UINT CXTPMenuBar::GetDefaultMenuResource() const {
  283. return m_nIDResource;
  284. }
  285. AFX_INLINE CXTPMenuBarMDIMenus* CXTPMenuBar::GetMDIMenus() const {
  286. return m_pMDIMenus;
  287. }
  288. #endif //#if !defined(__XTPMENUBAR_H__)