ToolbarEx.h
上传用户:shuini
上传日期:2007-02-05
资源大小:103k
文件大小:9k
源码类别:

工具条

开发平台:

Visual C++

  1. #if !defined(_TOOLBAREX_H_)
  2. #define _TOOLBAREX_H_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // ToolBarEx.h : header file
  7. //
  8. #include <afxtempl.h>
  9. #ifndef __AFXPRIV_H__
  10. #include <afxpriv.h>
  11. #endif
  12. #include "CustomizeDialog.h"
  13. ////////////////////////////////////////////////////////////////////////////
  14. // I got some pieces of this code from  MSJ Articles of Paul Dilascia
  15. //
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CToolBarEx window
  18. #define ID_CUSTOMIZE_BAR 0xFF
  19. /////////////////////////////////////////////////////////////////////////////
  20. // COMCTL32 v5.81 specific stuff:
  21. #ifndef TBSTYLE_EX_MIXEDBUTTONS
  22. #define TBSTYLE_EX_MIXEDBUTTONS         0x00000008
  23. #define TBSTYLE_EX_HIDECLIPPEDBUTTONS   0x00000010
  24. #define CCM_SETVERSION       (CCM_FIRST+7)
  25. #define CCM_GETVERSION       (CCM_FIRST+8)
  26. #endif  // !TBSTYLE_EX_MIXEDBUTTONS
  27. #ifndef BTNS_SHOWTEXT
  28. #define BTNS_SHOWTEXT           0x0040
  29. #endif  // !BTNS_SHOWTEXT
  30. #ifndef BTNS_WHOLEDROPDOWN
  31. #define BTNS_WHOLEDROPDOWN      0x0080
  32. #endif  // !BTNS_WHOLEDROPDOWN
  33. #ifndef TBN_SAVE
  34. #define TBN_SAVE                (TBN_FIRST - 22)
  35. #define TBN_RESTORE             (TBN_FIRST - 21)
  36. #ifndef TBN_INITCUSTOMIZE
  37. #define TBN_INITCUSTOMIZE       (TBN_FIRST - 23)
  38. #define TBNRF_HIDEHELP          0x00000001
  39. #endif  // !TBN_INITCUSTOMIZE
  40. typedef struct tagNMTBSAVE
  41. {
  42.     NMHDR hdr;
  43.     DWORD* pData;
  44.     DWORD* pCurrent;
  45.     UINT cbData;
  46.     int iItem;
  47.     int cButtons;
  48.     TBBUTTON tbButton;
  49. } NMTBSAVE, *LPNMTBSAVE;
  50. typedef struct tagNMTBRESTORE
  51. {
  52.     NMHDR hdr;
  53.     DWORD* pData;
  54.     DWORD* pCurrent;
  55.     UINT cbData;
  56.     int iItem;
  57.     int cButtons;
  58.     int cbBytesPerRecord;
  59.     TBBUTTON tbButton;
  60. } NMTBRESTORE, *LPNMTBRESTORE;
  61. #endif  // !TBN_SAVE
  62. class CToolBarEx : public CToolBar
  63. {
  64. protected:
  65. friend class CCustomizeDialog;
  66. // Inner structs
  67. struct CToolBarButtonInfo
  68. {
  69. TBBUTTON  tbButton; // information regarding the button
  70. CString  btnText; // text for the button
  71. BOOL  bInitiallyVisible ; //  Button intially vible
  72. // BOOL  bShowOnRight;  // Visible on Selective  Right
  73. };
  74. // One of these for each drop-down button
  75. struct CDropDownButtonInfo
  76. {
  77. CDropDownButtonInfo * pNext;
  78. UINT idButton; // command ID of button
  79. UINT idMenu; // popup menu to display
  80. } ;
  81. // Construction
  82. public:
  83. CToolBarEx();
  84. typedef CArray<CToolBarButtonInfo,CToolBarButtonInfo &> ToolBarInfoArray;
  85. // Attributes
  86. public:
  87. const static CSize m_szImageSmall;
  88. const static CSize m_szImageLarge;
  89. const static TextOptions  m_eInitialTextOptions;
  90. const static IconOptions  m_eInitialIconOptions;
  91. // Operations
  92. public:
  93. // this member function is called to insert a control into the toolbar
  94. // and returns a pointer to the newly inserted control
  95. //
  96. CWnd* InsertControl(CRuntimeClass* pClass,LPCTSTR lpszWindowName,CRect& rect,UINT nID,DWORD dwStyle );
  97. CWnd* InsertControl(CWnd* pCtrl,CRect& rect,UINT nID);
  98. // call to add drop-down buttons
  99. BOOL AddDropDownButton(UINT nIDButton,UINT nIDMenu,BOOL bArrow=TRUE);
  100. // state functions
  101. void SaveState();
  102. void RestoreState();
  103. //Call this function to set the customization, after you have done the changes to the toolbar.
  104. void SetToolBarInfoForCustomization(const ToolBarInfoArray * pAdditional=NULL);
  105. // Overrides
  106. // ClassWizard generated virtual function overrides
  107. //{{AFX_VIRTUAL(CToolBarEx)
  108. //}}AFX_VIRTUAL
  109. // Implementation
  110. public:
  111. BOOL MarkDefaultState();
  112. void Customize();
  113. TextOptions GetTextOptions() { return m_eTextOptions;  }
  114. void SetTextOptions(TextOptions txOptions,BOOL bUpdate=TRUE);
  115. IconOptions GetIconOptions() { return m_eIconOptions;  }
  116. void SetIconOptions(IconOptions txOptions,BOOL bUpdate=TRUE);
  117. BOOL SetDropDownButton(UINT nID,BOOL bArrow);
  118. BOOL LoadBitmap(LPCTSTR lpszResourceName);
  119. BOOL LoadBitmap(UINT nIDResource) { return LoadBitmap(MAKEINTRESOURCE(nIDResource)); }
  120. virtual ~CToolBarEx();
  121. // BOOL m_bShowDropdownArrowWhenVertical; // true to display a drop arrow when docked vertical
  122. BOOL m_bHideChildWndOnVertical; // Hide the windows when docked vertical
  123. // Generated message map functions
  124. protected:
  125. BOOL ShowContextMenu(CPoint pt);
  126. UINT m_nResButtons;
  127. BOOL  SetIconOptionBitmap(IconOptions eIconOptions);
  128. virtual BOOL HasButtonText(int nID);
  129.     static CCustomizeDialog*    m_pCustomizeDlg;
  130.     static HHOOK                m_hCBTHook;
  131. TextOptions  m_eTextOptions;
  132. IconOptions  m_eIconOptions;
  133. BOOL IsVertDocked();
  134. void PositionControls();
  135. CObList* m_pControls; // CObject pointer list which contains controls added to the toolbar
  136. CDropDownButtonInfo* m_pDropButtons; // list of dropdown button/menu pairs
  137. static int m_nBarNumber; // used for customization, holds bar number for restoration.
  138. CString m_strSubKey; // used for customization, holds registry subkey name.
  139. CString m_strValueName; // used for customization, holds registry value.
  140. ToolBarInfoArray   m_ToolBarInfo;
  141. COLORREF m_clrBtnHilight;
  142. COLORREF m_clrBtnShadow;
  143. COLORREF m_clrBtnFace;
  144.     static LRESULT CALLBACK CBTProc( int nCode, WPARAM wParam, LPARAM lParam );
  145. // Find buttons structure for given ID
  146. CDropDownButtonInfo * FindDropDownButtonInfo(UINT nID);
  147. BOOL OnToolBarBtnDropDown(NMHDR* pNMHDR, LRESULT* pRes);
  148. BOOL OnDropDownButtonInfo(const NMTOOLBAR& nmtb, UINT nID, CRect rc);
  149. //Chenged Functions
  150. CSize GetButtonSize(TBBUTTON* pData, int iButton,DWORD dwMode);
  151. CSize CalcSize(TBBUTTON* pData, int nCount,DWORD dwMode);
  152. int WrapToolBar(TBBUTTON* pData, int nCount, int nWidth,DWORD dwMode);
  153. //Copied Functions
  154. void SizeToolBar(TBBUTTON* pData, int nCount, int nLength, BOOL bVert, DWORD dwMode);
  155. CSize CalcLayout(DWORD dwMode, int nLength=-1);
  156. virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  157. virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode);
  158. void _GetButton(int nIndex, TBBUTTON* pButton) const;
  159. void _SetButton(int nIndex, TBBUTTON* pButton);
  160. void Draw3DBorders(CDC * pDC, CRect & rect) ;
  161. virtual BOOL OnChildNotify( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult )
  162. {
  163. if (message == WM_COMMAND)
  164. {
  165. }
  166. return CToolBar::OnChildNotify( message, wParam, lParam, pLResult );
  167. }
  168.    
  169. //{{AFX_MSG(CToolBarEx)
  170. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  171. afx_msg void OnPaint();
  172. afx_msg void OnSysColorChange();
  173. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  174. afx_msg void OnNcPaint();
  175. //}}AFX_MSG
  176. afx_msg void OnToolBarQueryDelete(NMHDR *pNMHDR, LRESULT *pResult);
  177. afx_msg void OnToolBarQueryInsert(NMHDR *pNMHDR, LRESULT *pResult);
  178. afx_msg void OnToolBarChange(NMHDR *pNMHDR, LRESULT *pResult);
  179. afx_msg void OnToolBarBeginAdjust(NMHDR *pNMHDR, LRESULT *pResult);
  180. afx_msg void OnToolBarCustomHelp(NMHDR *pNMHDR, LRESULT *pResult);
  181. afx_msg void OnToolBarEndAdjust(NMHDR *pNMHDR, LRESULT *pResult);
  182. afx_msg void OnToolBarGetButtonInfo(NMHDR *pNMHDR, LRESULT *pResult);
  183. afx_msg void OnToolBarReset(NMHDR *pNMHDR, LRESULT *pResult);
  184. afx_msg LRESULT OnCustomize(WPARAM,LPARAM) ;
  185.     afx_msg void OnInitCustomize( NMHDR* pNMHDR, LRESULT* pResult );
  186.     afx_msg void OnCustomDraw( NMHDR* pNMHDR, LRESULT* pResult );
  187.     // Saving and restoring toolbar
  188.     afx_msg void OnSave( NMHDR* pNMHDR, LRESULT* pResult );
  189.     afx_msg void OnRestore( NMHDR* pNMHDR, LRESULT* pResult );
  190. DECLARE_MESSAGE_MAP()
  191. DECLARE_DYNCREATE(CToolBarEx)  
  192. };
  193. // CDockBarEx Class
  194. class  CDockBarEx : public CDockBar
  195. {
  196. DECLARE_DYNAMIC(CDockBarEx)
  197. public:
  198. // Default constructor
  199. //
  200. CDockBarEx();
  201. // Virtual destructor
  202. //
  203. virtual ~CDockBarEx();
  204. // Overrides
  205. // ClassWizard generated virtual function overrides
  206. //{{AFX_VIRTUAL(CDockBarEx)
  207. public:
  208. virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  209. //}}AFX_VIRTUAL
  210. // Generated message map functions
  211. protected:
  212. //{{AFX_MSG(CDockBarEx)
  213. // NOTE - the ClassWizard will add and remove member functions here.
  214. //    DO NOT EDIT what you see in these blocks of generated code !
  215. //}}AFX_MSG
  216. DECLARE_MESSAGE_MAP()
  217. };
  218. /////////////////////////////////////////////////////////////////////////////
  219. void FrameEnableDocking(CFrameWnd * pFrame, DWORD dwDockStyle);
  220. /////////////////////////////////////////////////////////////////////////////
  221. //{{AFX_INSERT_LOCATION}}
  222. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  223. #endif // !defined(_TOOLBAREX_H_)