ToolBarEx.h
上传用户:ljqmhy0909
上传日期:2007-01-02
资源大小:185k
文件大小:7k
源码类别:

工具条

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 1997 by Joerg Koenig
  3. // All rights reserved
  4. //
  5. // Distribute freely, except: don't remove my name from the source or
  6. // documentation (don't take credit for my work), mark your changes (don't
  7. // get me blamed for your possible bugs), don't alter or remove this
  8. // notice.
  9. // No warrantee of any kind, express or implied, is included with this
  10. // software; use at your own risk, responsibility for damages (if any) to
  11. // anyone resulting from the use of this software rests entirely with the
  12. // user.
  13. //
  14. // Send bug reports, bug fixes, enhancements, requests, flames, etc., and
  15. // I'll try to keep a version up to date.  I can be reached as follows:
  16. //    J.Koenig@adg.de                 (company site)
  17. //    Joerg.Koenig@rhein-neckar.de    (private site)
  18. /////////////////////////////////////////////////////////////////////////////
  19. #if !defined(AFX_TOOLBAREX_H__1E0F37F5_4020_11D1_9FB1_444553540000__INCLUDED_)
  20. #define AFX_TOOLBAREX_H__1E0F37F5_4020_11D1_9FB1_444553540000__INCLUDED_
  21. #if _MSC_VER >= 1000
  22. #pragma once
  23. #endif // _MSC_VER >= 1000
  24. // ToolBarEx.h : header file
  25. //
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CToolBarEx window
  28. class CToolBarEx : public CToolBar
  29. {
  30. DECLARE_DYNAMIC(CToolBarEx)
  31. // data members
  32. private:
  33. BOOL m_bFlatLook;
  34. CSize m_sizeOffset; // real starting point of the image
  35. COLORREF m_clrBtnFace;
  36. COLORREF m_clrBtnHilight;
  37. COLORREF m_clrBtnShadow;
  38. COLORREF m_clrBtnLight;
  39. int m_nLastBtn; // index of last formed button
  40. UINT m_uTimerEvent;
  41. CUIntArray m_Styles;
  42. HWND m_hwndParent; // "real" parent (even in floating mode)
  43. BOOL m_bDeleteImgList; // remember the way we've built the image list
  44. CFont m_GuiFont;
  45. // Construction
  46. public:
  47. CToolBarEx();
  48. // Attributes
  49. public:
  50. void SetFlatLook( BOOL bFlat = TRUE ) {
  51. if( bFlat != m_bFlatLook ) {
  52. m_bFlatLook = bFlat;
  53. if( ::IsWindow(GetSafeHwnd()) ) {
  54. // force a repaint of all buttons
  55. Invalidate();
  56. // erase/draw the gripper
  57. OnNcPaint();
  58. }
  59. }
  60. }
  61. BOOL IsFlatLook() const {
  62. return m_bFlatLook;
  63. }
  64. // This function I've missed in CToolBar for more than one time ...
  65. void GetSizes( CSize & szBtn, CSize & szImg ) const {
  66. szBtn = m_sizeButton;
  67. szImg = m_sizeImage;
  68. }
  69. // Get the window to which the toolbar initially was docked. This
  70. // is not necessarily the window returned by CWnd::GetParent() or
  71. // CControlBar::GetDockingFrame(). Both these functions don't
  72. // return the expected window, if the toolbar is floating ...
  73. CWnd * GetParentFrame() const {
  74. return ::IsWindow(m_hwndParent) ? CWnd::FromHandle(m_hwndParent) : 0;
  75. }
  76. BOOL HasButtonText() const {
  77. return m_pStringMap != 0 && !m_pStringMap->IsEmpty();
  78. }
  79. // Operations
  80. public:
  81. // Overrides
  82. // ClassWizard generated virtual function overrides
  83. //{{AFX_VIRTUAL(CToolBarEx)
  84. //}}AFX_VIRTUAL
  85. protected:
  86. virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
  87. // Implementation
  88. public:
  89. virtual ~CToolBarEx();
  90. // Generated message map functions
  91. protected:
  92. //{{AFX_MSG(CToolBarEx)
  93. afx_msg void OnPaint();
  94. afx_msg void OnSysColorChange();
  95. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  96. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  97. afx_msg void OnNcPaint();
  98. afx_msg void OnTimer(UINT nIDEvent);
  99. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  100. //}}AFX_MSG
  101. afx_msg LRESULT OnSetButtonSize(WPARAM, LPARAM);
  102. afx_msg LRESULT OnSetBitmapSize(WPARAM, LPARAM);
  103. DECLARE_MESSAGE_MAP()
  104. private:
  105. // Recalculate the starting point of the button's image.
  106. void CalculateOffset() {
  107. if( HasButtonText() ) {
  108. // there are strings assigned to at least one button
  109. // center the image horizontal
  110. m_sizeOffset.cx = (m_sizeButton.cx-m_sizeImage.cx)/2;
  111. m_sizeOffset.cy = m_cyTopBorder;
  112. } else {
  113. // no button has text assigned: center the image on the button
  114. m_sizeOffset.cx = (m_sizeButton.cx-m_sizeImage.cx)/2;
  115. m_sizeOffset.cy = (m_sizeButton.cy-m_sizeImage.cy)/2;
  116. }
  117. }
  118. // some special drawing functions:
  119. void DrawDisabledButton( CDC &, const CRect & ) const;
  120. void DrawSeparator( CDC &, CRect & ) const;
  121. void DrawGripper( CDC & ) const;
  122. HIMAGELIST GetImageList();
  123. };
  124. /////////////////////////////////////////////////////////////////////////////
  125. //{{AFX_INSERT_LOCATION}}
  126. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  127. // There is a bug in the patch of VC++ 4.2b: The commctrl.h, which already
  128. // contains NM_CUSTOMDRAW is replaced with one version that doesn't.
  129. // Thanks to Todd C. Wilson for the code below.
  130. #if _MFC_VER >= 0x0420  &&  ! defined(NM_CUSTOMDRAW)
  131. #define NM_CUSTOMDRAW           (NM_FIRST-12)
  132. #define NM_HOVER                (NM_FIRST-13)
  133. #define TB_SETIMAGELIST         (WM_USER + 48)
  134. #define TB_GETIMAGELIST         (WM_USER + 49)
  135. #define TB_LOADIMAGES           (WM_USER + 50)
  136. #define TB_GETRECT              (WM_USER + 51) // wParam is the Cmd instead of index
  137. #define TB_SETHOTIMAGELIST      (WM_USER + 52)
  138. #define TB_GETHOTIMAGELIST      (WM_USER + 53)
  139. #define TB_SETDISABLEDIMAGELIST (WM_USER + 54)
  140. #define TB_GETDISABLEDIMAGELIST (WM_USER + 55)
  141. #define TB_SETSTYLE             (WM_USER + 56)
  142. #define TB_GETSTYLE             (WM_USER + 57)
  143. #define TB_GETBUTTONSIZE        (WM_USER + 58)
  144. //==================== CUSTOM DRAW ==========================================
  145. // custom draw return flags
  146. // values under 0x00010000 are reserved for global custom draw values.
  147. // above that are for specific controls
  148. #define CDRF_DODEFAULT          0x00000000
  149. #define CDRF_NEWFONT            0x00000002
  150. #define CDRF_SKIPDEFAULT        0x00000004
  151. #define CDRF_NOTIFYPOSTPAINT    0x00000010
  152. #define CDRF_NOTIFYITEMDRAW     0x00000020
  153. // drawstage flags
  154. // values under 0x00010000 are reserved for global custom draw values.
  155. // above that are for specific controls
  156. #define CDDS_PREPAINT           0x000000001
  157. #define CDDS_POSTPAINT          0x000000002
  158. // the 0x000010000 bit means it's individual item specific
  159. #define CDDS_ITEM               0x000010000
  160. #define CDDS_ITEMPREPAINT       (CDDS_ITEM | CDDS_PREPAINT)
  161. #define CDDS_ITEMPOSTPAINT      (CDDS_ITEM | CDDS_POSTPAINT)
  162. // itemState flags
  163. #define CDIS_SELECTED    0x0001
  164. #define CDIS_GRAYED      0x0002
  165. #define CDIS_DISABLED    0x0004
  166. #define CDIS_CHECKED     0x0008
  167. #define CDIS_FOCUS       0x0010
  168. #define CDIS_DEFAULT     0x0020
  169. typedef struct tagNMCUSTOMDRAWINFO
  170. {
  171.     NMHDR hdr;
  172.     DWORD dwDrawStage;
  173.     HDC hdc;
  174.     RECT rc;
  175.     DWORD dwItemSpec;  // this is control specific, but it's how to specify an item.  valid only with CDDS_ITEM bit set
  176.     UINT  uItemState;
  177.     LPARAM lItemlParam;
  178. } NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW;
  179. // for tooltips
  180. typedef struct tagNMTTCUSTOMDRAW
  181. {
  182.     NMCUSTOMDRAW nmcd;
  183.     UINT uDrawFlags;
  184. } NMTTCUSTOMDRAW, FAR * LPNMTTCUSTOMDRAW;
  185. #endif  // _MFC_VER >= 4.2 && ! defined(NM_CUSTOMDRAW)
  186. #endif // !defined(AFX_TOOLBAREX_H__1E0F37F5_4020_11D1_9FB1_444553540000__INCLUDED_)