ToolBarEx.h
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:8k
源码类别:

P2P编程

开发平台:

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. #include "DkToolBar.h"
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CToolBarEx window
  29. class CToolBarEx : public CDkToolBar
  30. {
  31. DECLARE_DYNAMIC(CToolBarEx)
  32. // data members
  33. private:
  34. BOOL m_bFlatLook;
  35. CSize m_sizeOffset; // real starting point of the image
  36. COLORREF m_clrBtnFace;
  37. COLORREF m_clrBtnHilight;
  38. COLORREF m_clrBtnShadow;
  39. COLORREF m_clrBtnLight;
  40. int m_nLastBtn; // index of last formed button
  41. UINT m_uTimerEvent;
  42. CUIntArray m_Styles;
  43. HWND m_hwndParent; // "real" parent (even in floating mode)
  44. BOOL m_bDeleteImgList; // remember the way we've built the image list
  45. CFont m_GuiFont;
  46. BOOL m_bTracking;
  47. bool m_bMouseLeave;
  48. // Construction
  49. public:
  50. CToolBarEx();
  51. // Attributes
  52. public:
  53. void SetFlatLook( BOOL bFlat = TRUE ) {
  54. if( bFlat != m_bFlatLook ) {
  55. m_bFlatLook = bFlat;
  56. if( ::IsWindow(GetSafeHwnd()) ) {
  57. // force a repaint of all buttons
  58. Invalidate();
  59. // erase/draw the gripper
  60. OnNcPaint();
  61. }
  62. }
  63. }
  64. BOOL IsFlatLook() const {
  65. return m_bFlatLook;
  66. }
  67. // This function I've missed in CToolBar for more than one time ...
  68. void GetSizes( CSize & szBtn, CSize & szImg ) const {
  69. szBtn = m_sizeButton;
  70. szImg = m_sizeImage;
  71. }
  72. // Get the window to which the toolbar initially was docked. This
  73. // is not necessarily the window returned by CWnd::GetParent() or
  74. // CControlBar::GetDockingFrame(). Both these functions don't
  75. // return the expected window, if the toolbar is floating ...
  76. CWnd * GetParentFrame() const {
  77. return ::IsWindow(m_hwndParent) ? CWnd::FromHandle(m_hwndParent) : 0;
  78. }
  79. BOOL HasButtonText() const {
  80. return m_pStringMap != 0 && !m_pStringMap->IsEmpty();
  81. }
  82. // Operations
  83. public:
  84. // Overrides
  85. // ClassWizard generated virtual function overrides
  86. //{{AFX_VIRTUAL(CToolBarEx)
  87. //}}AFX_VIRTUAL
  88. protected:
  89. virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
  90. // Implementation
  91. public:
  92. virtual ~CToolBarEx();
  93. // Generated message map functions
  94. protected:
  95. //{{AFX_MSG(CToolBarEx)
  96. afx_msg void OnPaint();
  97. afx_msg void OnSysColorChange();
  98. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  99. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  100. afx_msg void OnNcPaint();
  101. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  102. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  103. //}}AFX_MSG
  104. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  105. LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
  106. afx_msg LRESULT OnSetButtonSize(WPARAM, LPARAM);
  107. afx_msg LRESULT OnSetBitmapSize(WPARAM, LPARAM);
  108. DECLARE_MESSAGE_MAP()
  109. private:
  110. // Recalculate the starting point of the button's image.
  111. void CalculateOffset() {
  112. if( HasButtonText() ) {
  113. // there are strings assigned to at least one button
  114. // center the image horizontal
  115. m_sizeOffset.cx = (m_sizeButton.cx-m_sizeImage.cx)/2;
  116. m_sizeOffset.cy = m_cyTopBorder;
  117. } else {
  118. // no button has text assigned: center the image on the button
  119. m_sizeOffset.cx = (m_sizeButton.cx-m_sizeImage.cx)/2;
  120. m_sizeOffset.cy = (m_sizeButton.cy-m_sizeImage.cy)/2;
  121. }
  122. }
  123. // some special drawing functions:
  124. void DrawDisabledButton( CDC &, const CRect & ) const;
  125. void DrawSeparator( CDC &, CRect & ) const;
  126. void DrawGripper( CDC & ) const;
  127. HIMAGELIST GetImageList(UINT nImageType);
  128. void DrawFace(COLORREF Top, COLORREF Bottom, CRect& rc, CRect CalRc, CDC* pDC);
  129. void DrawFrame(COLORREF HeightLight, COLORREF ShadowLight, COLORREF FrameColor, CRect& rc, CDC* pDC);
  130. CBitmap m_bmpBack;
  131. };
  132. /////////////////////////////////////////////////////////////////////////////
  133. //{{AFX_INSERT_LOCATION}}
  134. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  135. // There is a bug in the patch of VC++ 4.2b: The commctrl.h, which already
  136. // contains NM_CUSTOMDRAW is replaced with one version that doesn't.
  137. // Thanks to Todd C. Wilson for the code below.
  138. #if _MFC_VER >= 0x0420  &&  ! defined(NM_CUSTOMDRAW)
  139. #define NM_CUSTOMDRAW           (NM_FIRST-12)
  140. #define NM_HOVER                (NM_FIRST-13)
  141. #define TB_SETIMAGELIST         (WM_USER + 48)
  142. #define TB_GETIMAGELIST         (WM_USER + 49)
  143. #define TB_LOADIMAGES           (WM_USER + 50)
  144. #define TB_GETRECT              (WM_USER + 51) // wParam is the Cmd instead of index
  145. #define TB_SETHOTIMAGELIST      (WM_USER + 52)
  146. #define TB_GETHOTIMAGELIST      (WM_USER + 53)
  147. #define TB_SETDISABLEDIMAGELIST (WM_USER + 54)
  148. #define TB_GETDISABLEDIMAGELIST (WM_USER + 55)
  149. #define TB_SETSTYLE             (WM_USER + 56)
  150. #define TB_GETSTYLE             (WM_USER + 57)
  151. #define TB_GETBUTTONSIZE        (WM_USER + 58)
  152. //==================== CUSTOM DRAW ==========================================
  153. // custom draw return flags
  154. // values under 0x00010000 are reserved for global custom draw values.
  155. // above that are for specific controls
  156. #define CDRF_DODEFAULT          0x00000000
  157. #define CDRF_NEWFONT            0x00000002
  158. #define CDRF_SKIPDEFAULT        0x00000004
  159. #define CDRF_NOTIFYPOSTPAINT    0x00000010
  160. #define CDRF_NOTIFYITEMDRAW     0x00000020
  161. // drawstage flags
  162. // values under 0x00010000 are reserved for global custom draw values.
  163. // above that are for specific controls
  164. #define CDDS_PREPAINT           0x000000001
  165. #define CDDS_POSTPAINT          0x000000002
  166. // the 0x000010000 bit means it's individual item specific
  167. #define CDDS_ITEM               0x000010000
  168. #define CDDS_ITEMPREPAINT       (CDDS_ITEM | CDDS_PREPAINT)
  169. #define CDDS_ITEMPOSTPAINT      (CDDS_ITEM | CDDS_POSTPAINT)
  170. // itemState flags
  171. #define CDIS_SELECTED    0x0001
  172. #define CDIS_GRAYED      0x0002
  173. #define CDIS_DISABLED    0x0004
  174. #define CDIS_CHECKED     0x0008
  175. #define CDIS_FOCUS       0x0010
  176. #define CDIS_DEFAULT     0x0020
  177. typedef struct tagNMCUSTOMDRAWINFO
  178. {
  179.     NMHDR hdr;
  180.     DWORD dwDrawStage;
  181.     HDC hdc;
  182.     RECT rc;
  183.     DWORD dwItemSpec;  // this is control specific, but it's how to specify an item.  valid only with CDDS_ITEM bit set
  184.     UINT  uItemState;
  185.     LPARAM lItemlParam;
  186. } NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW;
  187. // for tooltips
  188. typedef struct tagNMTTCUSTOMDRAW
  189. {
  190.     NMCUSTOMDRAW nmcd;
  191.     UINT uDrawFlags;
  192. } NMTTCUSTOMDRAW, FAR * LPNMTTCUSTOMDRAW;
  193. #endif  // _MFC_VER >= 4.2 && ! defined(NM_CUSTOMDRAW)
  194. #endif // !defined(AFX_TOOLBAREX_H__1E0F37F5_4020_11D1_9FB1_444553540000__INCLUDED_)