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

对话框与窗口

开发平台:

Visual C++

  1. // XTMDIWndTab.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(__XTMDIWNDTAB_H__)
  22. #define __XTMDIWNDTAB_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. // forwards
  28. class CXTMDIWndTab;
  29. #include "XTTabBase.h"
  30. //===========================================================================
  31. // Summary:
  32. //     CXTMDIClientWnd is a CWnd derived helper class for the CXTMDIWndTab tab
  33. //     control. This class routes messages sent to the client window back
  34. //     to the tab control.
  35. //===========================================================================
  36. class _XTP_EXT_CLASS CXTMDIClientWnd : public CWnd
  37. {
  38. public:
  39. //-----------------------------------------------------------------------
  40. // Summary:
  41. //     Constructs a CXTMDIClientWnd object
  42. // Parameters:
  43. //     pMDIWndTab - Pointer to a CXTMDITabWnd object.
  44. //-----------------------------------------------------------------------
  45. CXTMDIClientWnd(CXTMDIWndTab* pMDIWndTab);
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     Destroys a CXTMDIClientWnd object, handles cleanup and deallocation
  49. //-----------------------------------------------------------------------
  50. virtual ~CXTMDIClientWnd();
  51. public:
  52. //-----------------------------------------------------------------------
  53. // Summary:
  54. //     This member function will set the size of the gap between the client
  55. //     area and the tab control.
  56. // Parameters:
  57. //     iSize - Amount in pixels of gap between the tab control and the client.
  58. //-----------------------------------------------------------------------
  59. void SetBorderGap(int iSize);
  60. protected:
  61. //{{AFX_CODEJOCK_PRIVATE
  62. DECLARE_MESSAGE_MAP()
  63. //{{AFX_VIRTUAL(CXTMDIClientWnd)
  64. virtual void CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType = adjustBorder);
  65. //}}AFX_VIRTUAL
  66. //{{AFX_MSG(CXTMDIClientWnd)
  67. afx_msg LRESULT OnMDICreate(WPARAM wParam, LPARAM lParam);
  68. afx_msg LRESULT OnMDIDestroy(WPARAM wParam, LPARAM lParam);
  69. afx_msg LRESULT OnMDIActivate(WPARAM wParam, LPARAM lParam);
  70. //}}AFX_MSG
  71. //}}AFX_CODEJOCK_PRIVATE
  72. protected:
  73. int             m_iBorderGap; // Amount in pixels between the client and the tab control.
  74. CXTMDIWndTab*   m_pMDIWndTab; // Pointer to the MDI tab control.
  75. };
  76. //////////////////////////////////////////////////////////////////////
  77. AFX_INLINE void CXTMDIClientWnd::SetBorderGap(int iBorderGap) {
  78. m_iBorderGap = iBorderGap;
  79. }
  80. DECLATE_TABCTRL_BASE(CXTMDIWndTabBase, CTabCtrl, CXTTabBase)
  81. // -------------------------------------------------------------------
  82. // Summary:
  83. //     CXTMDIWndTab class is used for creating a tabbed MDI document
  84. //     interface.
  85. // Remarks:
  86. //     CXTMDIWndTab is derived from CTabCtrl and CXTTabCtrlBase and is
  87. //     used to create a tab control for a multiple document interface
  88. //     (MDI) application.
  89. // Example:
  90. //     The following example demonstrates the use of CXTMDIWndTab.
  91. // <code>
  92. // // Install the MDI tab window.
  93. // m_wndMDITabWindow.Install(this, NULL, TRUE);
  94. // m_wndMDITabWindow.SetBorderGap(1);
  95. // </code>
  96. // -------------------------------------------------------------------
  97. class _XTP_EXT_CLASS CXTMDIWndTab : public CXTMDIWndTabBase
  98. {
  99. DECLARE_DYNAMIC(CXTMDIWndTab)
  100. DECLARE_THEME_REFRESH(CXTMDIWndTab)
  101. // ----------------------------------------------------------------------
  102. // Remarks:
  103. //     MDICHILD structure is used by the CXTMDIWndTab class for
  104. //     maintaining information on each window in a MDI tab.
  105. // See Also:
  106. //     CMDIChildList, CXTMDIWndTab
  107. // ----------------------------------------------------------------------
  108. struct MDICHILD
  109. {
  110. int     iItem;      // Index of the item in the tab control.
  111. HWND    hWnd;       // Window handle of the tab item.
  112. CString strItem;    // Tab label.
  113. };
  114. // ----------------------------------------------------------------------
  115. // Summary:
  116. //     List for maintaining MDICHILD structures.
  117. // Remarks:
  118. //     CList definition used by the CXTMDIWndTab class to maintain a list
  119. //     of MDICHILD structures representing each MDI child item in the
  120. //     tab control.
  121. // See Also:
  122. //     CXTMDIWndTab, MDICHILD
  123. // ----------------------------------------------------------------------
  124. typedef CList<MDICHILD*, MDICHILD*> CMDIChildList;
  125. // ----------------------------------------------------------------------
  126. // Summary:
  127. //     Map for maintaining HWND to HICON handle relationships.
  128. // Remarks:
  129. //     CMap definition used by the CXTMDIWndTab class to maintain
  130. //     a list of HWND to HICON handle relationships to map a MDI child
  131. //     window with the tab icon displayed.
  132. // See Also:
  133. //     CXTMDIWndTab
  134. // -----------------------------------------------------------------
  135. typedef CMap<HWND, HWND, HICON, HICON&> CIconWndMap;
  136. // ----------------------------------------------------------------------
  137. // Summary:
  138. //     Map for maintaining HWND to CString object relationships.
  139. // Remarks:
  140. //     CMap definition used by the CXTMDIWndTab class to maintain
  141. //     a list of HWND to CString object relationships to map a MDI child
  142. //     window with the tab label displayed.
  143. // See Also:
  144. //     CXTMDIWndTab
  145. // -----------------------------------------------------------------
  146. typedef CMap<HWND, HWND, CString, CString&> CStringMap;
  147. public:
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //     Constructs a CXTMDIWndTab object
  151. //-----------------------------------------------------------------------
  152. CXTMDIWndTab();
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     Destroys a CXTMDIWndTab object, handles cleanup and deallocation
  156. //-----------------------------------------------------------------------
  157. virtual ~CXTMDIWndTab();
  158. public:
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //     Call this member function to set the icon for the tab item specified
  162. //     by 'iIndex'.
  163. // Parameters:
  164. //     iIndex - Zero-based index of the tab to set the tab icon for.
  165. //     hChildWnd - Valid HWND of the MDI child window to set the tab icon for.
  166. //     hIcon  - Reference to an HICON handle that represents the tab icon.
  167. // Returns:
  168. //     true if successful, otherwise returns false.
  169. //-----------------------------------------------------------------------
  170. bool SetTabIcon(int iIndex, HICON& hIcon);
  171. bool SetTabIcon(HWND hChildWnd, HICON& hIcon); // <combine CXTMDIWndTab::SetTabIcon@int@HICON&>
  172. //-----------------------------------------------------------------------
  173. // Summary:
  174. //     Call this member function to set the label for the tab item specified
  175. //     by 'iIndex'.
  176. // Parameters:
  177. //     iIndex   - Zero-based index of the tab to set the tab text for.
  178. //     hChildWnd - Valid HWND of the MDI child window to set the tab text for.
  179. //     strLabel - Reference to a CString object that represents the tab label.
  180. // Returns:
  181. //     true if successful, otherwise returns false.
  182. //-----------------------------------------------------------------------
  183. bool SetTabLabel(int iIndex, CString& strLabel);
  184. bool SetTabLabel(HWND hChildWnd, CString& strLabel); // <combine CXTMDIWndTab::SetTabLabel@int@CString&>
  185. //-----------------------------------------------------------------------
  186. // Summary:
  187. //     This member function will install the MDI tab views with your application.
  188. // Parameters:
  189. //     pMDIFrameWnd - Points to the parent MDI frame window.
  190. //     dwStyle      - Style for the tab control. It can be any of the TCS_ values.
  191. //     bNoIcons     - Set to TRUE for no icon to display
  192. // Returns:
  193. //     TRUE if successful, otherwise returns FALSE.
  194. //-----------------------------------------------------------------------
  195. virtual BOOL Install(CMDIFrameWnd* pMDIFrameWnd, DWORD dwStyle = TCS_BOTTOM | TCS_HOTTRACK, BOOL bNoIcons = XTAuxData().bXPMode);
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     This member function will uninstall the MDI tab views from your application.
  199. // Returns:
  200. //     TRUE if successful, otherwise returns FALSE.
  201. //-----------------------------------------------------------------------
  202. virtual BOOL UnInstall();
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     Call this member function to retrieve the tab index from the current
  206. //     cursor position.
  207. // Parameters:
  208. //     point - Pointer to a CPoint object that contains the cursor screen
  209. //             coordinates. Use default for the current cursor position.
  210. // Returns:
  211. //     The zero-based index of the tab, or -1 if no tab is at the specified point.
  212. //-----------------------------------------------------------------------
  213. int TabFromPoint(CPoint point) const;
  214. //-----------------------------------------------------------------------
  215. // Summary:
  216. //     This member function will return a pointer to the child frame associated
  217. //     with the tab item.
  218. // Parameters:
  219. //     iIndex - Index of the tab control. If -1, then the tab under the mouse when
  220. //              the last right click was performed will be used.
  221. //     point - CPoint object that represents the cursor position.
  222. // Returns:
  223. //     A CWnd object if successful, otherwise returns NULL.
  224. //-----------------------------------------------------------------------
  225. CMDIChildWnd* GetFrameWnd(int iIndex = -1) const;
  226. CMDIChildWnd* GetFrameWnd(CPoint point) const; // <combine CXTMDIWndTab::GetFrameWnd@int@const>
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     This member function is used to set the resource ID for the popup menu
  230. //     used by the tab control.
  231. // Parameters:
  232. //     popupMenuID - ID for the tab control popup menu.
  233. //     nPos        - Index position in the menu resource.
  234. //     nDefCmd     - ID of the default menu command, will display bold.
  235. //-----------------------------------------------------------------------
  236. void SetMenuID(UINT popupMenuID, int nPos = 0, UINT nDefCmd = (UINT)-1);
  237. //-----------------------------------------------------------------------
  238. // Summary:
  239. //     This member function will set the size of the gap between the client
  240. //     area and the tab control.
  241. // Parameters:
  242. //     iSize - Amount in pixels of gap between the tab control and the client.
  243. //-----------------------------------------------------------------------
  244. void SetBorderGap(int iSize);
  245. //-----------------------------------------------------------------------
  246. // Summary:
  247. //     This member function will get the text for the specified MDI child
  248. //     window.
  249. // Parameters:
  250. //     hWnd - Handle to a valid CMDIChildWnd object.
  251. // Returns:
  252. //     A const CString object that represents the document title.
  253. //-----------------------------------------------------------------------
  254. CString GetChildWndText(HWND hWnd) const;
  255. protected:
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     This member function is called by the CXTMDIWndTab class to
  259. //     perform initialization when the window is created or sub-classed.
  260. // Returns:
  261. //     TRUE if the window was successfully initialized, otherwise FALSE.
  262. //-----------------------------------------------------------------------
  263. virtual bool Init();
  264. //-----------------------------------------------------------------------
  265. // Summary:
  266. //     This member function is called to initialize the font for the tab control
  267. //     associated with this view.
  268. //-----------------------------------------------------------------------
  269. virtual void InitializeFont();
  270. //-----------------------------------------------------------------------
  271. // Summary:
  272. //     This member function is called to insert a child frame into the MDI
  273. //     tab control.
  274. // Parameters:
  275. //     pChildFrame   - A pointer to a valid child frame window.
  276. //     bRecalcLayout - TRUE to force the MDI frame window to recalc the layout.
  277. //-----------------------------------------------------------------------
  278. virtual void InsertTabWnd(CMDIChildWnd* pChildFrame, BOOL bRecalcLayout = TRUE);
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //     This member function is called by the tab control to ensure the current
  282. //     selection matches the active document.
  283. // Returns:
  284. //     FALSE if there is no active document, otherwise returns TRUE.
  285. //-----------------------------------------------------------------------
  286. BOOL RefreshActiveSel();
  287. //-----------------------------------------------------------------------
  288. // Summary:
  289. //     This member function is called by the tab control to ensure the tab
  290. //     labels match their corresponding views.
  291. //-----------------------------------------------------------------------
  292. void RefreshTabLabels();
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     This member function is called by the tab control to ensure the stored
  296. //     indexes match their corresponding tab indexes.
  297. //-----------------------------------------------------------------------
  298. void RefreshIndexes();
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     Called when an WM_MDICREATE message is sent to a multiple-document
  302. //     interface (MDI) client window to create an MDI child window.
  303. // Parameters:
  304. //     hWnd - handle to destination control
  305. //-----------------------------------------------------------------------
  306. virtual void OnMDICreate(HWND hWnd);
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //     Called when an WM_MDIDESTROY message is sent to a multiple-document
  310. //     interface (MDI) client window to close an MDI child window.
  311. // Parameters:
  312. //     hWnd - handle to destination control
  313. //-----------------------------------------------------------------------
  314. virtual void OnMDIDestroy(HWND hWnd);
  315. //-----------------------------------------------------------------------
  316. // Summary:
  317. //     Called when an WM_MDIACTIVATE message is sent to a multiple-document
  318. //     interface (MDI) client window to instruct the client window
  319. //     to activate a different MDI child window.
  320. // Parameters:
  321. //     hWnd - handle to destination control
  322. //-----------------------------------------------------------------------
  323. virtual void OnMDIActivate(HWND hWnd);
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     Called to refresh the tab labels and frame window layout.
  327. // Parameters:
  328. //     bDelayRecalc - TRUE to call DelayRecalcLayout for the parent frame.
  329. //-----------------------------------------------------------------------
  330. virtual void RecalcLayout(BOOL bDelayRecalc);
  331. protected:
  332. //{{AFX_CODEJOCK_PRIVATE
  333. DECLARE_MESSAGE_MAP()
  334. //{{AFX_MSG(CXTMDIWndTab)
  335. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  336. afx_msg void OnNcPaint();
  337. afx_msg void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult);
  338. afx_msg void OnDestroy();
  339. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  340. afx_msg void OnIdleUpdateCmdUI();
  341. afx_msg void OnTabClose();
  342. //}}AFX_MSG
  343. //}}AFX_CODEJOCK_PRIVATE
  344. protected:
  345. int               m_iBorderGap;      // Amount in pixels between the client and the tab control.
  346. int               m_iHitTest;        // Index of the tab that received a right click.
  347. int               m_nPos;            // Index of the popup menu contained in the menu.
  348. UINT              m_nDefCmd;         // Command ID of the default menu item for the popup menu.
  349. UINT              m_popupMenuID;     // Popup menu resource ID.
  350. HWND              m_hActiveChild;    // Active MDI child.
  351. BOOL              m_bNoIcons;        // TRUE if no icons are used.
  352. DWORD             m_dwInitSignature; // Initialization state signature to synch up posted init requests.
  353. CImageList        m_imageList;       // Tab image list.
  354. CMDIFrameWnd*     m_pMDIFrameWnd;    // Points to the owner frame.
  355. CMDIChildList     m_arMDIChildern;   // Array of the MDI windows added to the tab control.
  356. CXTMDIClientWnd*  m_pMDIClientWnd;   // Window that receives messages on behalf of the MDI client.
  357. CIconWndMap       m_mapTabIcons;     // Hash table that maps icons to the MDI child frame windows.
  358. CStringMap        m_mapTabLabels;    // Hash table that maps labels to the MDI child frame windows.
  359. friend class CXTMDIClientWnd;
  360. };
  361. //////////////////////////////////////////////////////////////////////
  362. AFX_INLINE void CXTMDIWndTab::SetMenuID(UINT popupMenuID, int nPos, UINT nDefCmd) {
  363. m_popupMenuID = popupMenuID; m_nPos = nPos; m_nDefCmd = nDefCmd;
  364. }
  365. AFX_INLINE void CXTMDIWndTab::SetBorderGap(int iBorderGap) {
  366. m_iBorderGap = iBorderGap; m_pMDIClientWnd->SetBorderGap(iBorderGap + ::GetSystemMetrics(SM_CXSIZEFRAME));
  367. }
  368. #endif // !defined(__XTMDIWNDTAB_H__)