UIFlatBar.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // Copyright 1998 Paul DiLascia
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. //
  6. #ifndef __FLATBAR_H
  7. #define __FLATBAR_H
  8. #ifndef TB_SETEXTENDEDSTYLE
  9. #error FlatBar.h requires a newer version of the SDK than you have!
  10. #error Please update your SDK files.
  11. #endif
  12. #ifndef countof
  13. #define countof(x) (sizeof(x)/sizeof(x[0]))
  14. #endif
  15. #ifndef _tsizeof
  16. #define _tsizeof(s) sizeof(s)/sizeof(TCHAR)
  17. #endif
  18. #include "UIFixTB.h"
  19. // fwd ref
  20. struct DROPDOWNBUTTON;
  21. #define CFlatToolBarBase CFixMFCToolBar
  22. //////////////////
  23. // CFlatToolbar is a drop-in replacement for CToolBar that supports
  24. // flat-style buttons and gripper handles. Use instead of CToolBar in your
  25. // CMainFrame. CFlatTooBar's don'tK actually have to have the flat style,
  26. // but they do by default. If you don't want the flat look, you can call
  27. // ModifyStyle(TBSTYLE_FLAT, 0);
  28. //
  29. // CFlatToolBar overcomes various MFC drawing bugs that cause it not to work
  30. // with flat-style buttons. CFlatToolBar Can also used inside a coolbar
  31. // (unlike CToolBar).
  32. //
  33. // CFlatToolBar has other good stuff too, like an easy way to handle drop-down
  34. // buttons--See MBTest for example how to use.
  35. //
  36. class CTRL_EXT_CLASS CFlatToolBar : public CFlatToolBarBase {
  37. public:
  38. CFlatToolBar();
  39. virtual ~CFlatToolBar();
  40. static BOOL bTRACE; // to see TRACE diagnostics
  41. // set these before creation:
  42. BOOL m_bDrawDisabledButtonsInColor; // draw disabled buttons in color
  43. BOOL m_bInCoolBar; // set if flatbar is inside coolbar
  44. // You must call one of these to get the flat look; if not, you must
  45. // set TBSTYLE_FLAT yourself.
  46. BOOL LoadToolBar(LPCTSTR lpszResourceName);
  47. BOOL LoadToolBar(UINT nIDResource)
  48. { return LoadToolBar(MAKEINTRESOURCE(nIDResource)); }
  49. // call to add drop-down buttons
  50. BOOL AddDropDownButton(UINT nIDButton, UINT nIDMenu, BOOL bArrow);
  51. // Use these to get/set the flat style. By default, LoadToolBar calls
  52. // SetFlatStyle(TRUE); if you create some other way, you must call it
  53. // yourself.
  54. BOOL SetFlatStyle(BOOL bFlat) {
  55. return ModifyStyle(bFlat ? 0 : TBSTYLE_FLAT, bFlat ? TBSTYLE_FLAT : 0);
  56. }
  57. BOOL GetFlatStyle() {
  58. return (GetStyle() & TBSTYLE_FLAT)!=0;
  59. }
  60. // silly function to fake out compiler with const-ness
  61. LRESULT SendMessageC(UINT m, WPARAM wp=0, LPARAM lp=0) const
  62. { return ((CFixMFCToolBar*)this)->SendMessage(m, wp, lp); }
  63. // Wrappers that are not in MFC but should be;
  64. // I copied these from CToolBarCtrl
  65. BOOL EnableButton(int nID, BOOL bEnable)
  66. { return SendMessage(TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0)); }
  67. BOOL CheckButton(int nID, BOOL bCheck)
  68. { return SendMessage(TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0)); }
  69. BOOL PressButton(int nID, BOOL bPress)
  70. { return SendMessage(TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0)); }
  71. BOOL HideButton(int nID, BOOL bHide)
  72. { return SendMessage(TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0)); }
  73. BOOL Indeterminate(int nID, BOOL bIndeterminate)
  74. { return SendMessage(TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0)); }
  75. BOOL IsButtonEnabled(int nID) const
  76. { return SendMessageC(TB_ISBUTTONENABLED, nID); }
  77. BOOL IsButtonChecked(int nID) const
  78. { return SendMessageC(TB_ISBUTTONCHECKED, nID); }
  79. BOOL IsButtonPressed(int nID) const
  80. { return SendMessageC(TB_ISBUTTONPRESSED, nID); }
  81. BOOL IsButtonHidden(int nID) const
  82. { return SendMessageC(TB_ISBUTTONHIDDEN, nID); }
  83. BOOL IsButtonIndeterminate(int nID) const
  84. { return SendMessageC(TB_ISBUTTONINDETERMINATE, nID); }
  85. BOOL SetState(int nID, UINT nState)
  86. { return SendMessage(TB_SETSTATE, nID, MAKELPARAM(nState, 0)); }
  87. int GetState(int nID) const
  88. { return SendMessageC(TB_GETSTATE, nID); }
  89. BOOL AddButtons(int nNumButtons, LPTBBUTTON lpButtons)
  90. { return SendMessage(TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons); }
  91. BOOL InsertButton(int nIndex, LPTBBUTTON lpButton)
  92. { return SendMessage(TB_INSERTBUTTON, nIndex, (LPARAM)lpButton); }
  93. BOOL DeleteButton(int nIndex)
  94. { return SendMessage(TB_DELETEBUTTON, nIndex); }
  95. int GetButtonCount() const
  96. { return SendMessageC(TB_BUTTONCOUNT); }
  97. UINT CommandToIndex(UINT nID) const
  98. { return SendMessageC(TB_COMMANDTOINDEX, nID); }
  99. void Customize()
  100. { SendMessage(TB_CUSTOMIZE, 0, 0L); }
  101. int AddStrings(LPCTSTR lpszStrings)
  102. { return SendMessage(TB_ADDSTRING, 0, (LPARAM)lpszStrings); }
  103. void SetButtonStructSize(int nSize)
  104. { SendMessage(TB_BUTTONSTRUCTSIZE, nSize); }
  105. BOOL SetButtonSize(CSize sz)
  106. { return SendMessage(TB_SETBUTTONSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
  107. BOOL SetBitmapSize(CSize sz)
  108. { return SendMessage(TB_SETBITMAPSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
  109. void AutoSize()
  110. { SendMessage(TB_AUTOSIZE); }
  111. CToolTipCtrl* GetToolTips() const
  112. { return (CToolTipCtrl*)CWnd::FromHandle((HWND)SendMessageC(TB_GETTOOLTIPS)); }
  113. void SetToolTips(CToolTipCtrl* pTip)
  114. { SendMessage(TB_SETTOOLTIPS, (WPARAM)pTip->m_hWnd); }
  115. // NO!!!--this is not the same as the MFC owner
  116. // void SetOwner(CWnd* pWnd)
  117. // { SendMessage(TB_SETPARENT, (WPARAM)pWnd->m_hWnd); }
  118. void SetRows(int nRows, BOOL bLarger, LPRECT lpRect)
  119. { SendMessage(TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect); }
  120. int GetRows() const
  121. { return (int) SendMessageC(TB_GETROWS); }
  122. BOOL SetCmdID(int nIndex, UINT nID)
  123. { return SendMessage(TB_SETCMDID, nIndex, nID); }
  124. UINT GetBitmapFlags() const
  125. { return (UINT) SendMessageC(TB_GETBITMAPFLAGS); }
  126. // Wrappers for some of the newer messages--not complete
  127. BOOL SetIndent(int indent)
  128. { return SendMessage(TB_SETINDENT, indent); }
  129. HIMAGELIST GetImageList() const
  130. { return (HIMAGELIST)SendMessageC(TB_GETIMAGELIST); }
  131. HIMAGELIST SetImageList(HIMAGELIST hImgList)
  132. { return (HIMAGELIST)SendMessage(TB_SETIMAGELIST, 0, (LPARAM)hImgList); }
  133. int GetBitmap(UINT nIdButton) const
  134. { return SendMessageC(TB_GETBITMAP, nIdButton); }
  135. DWORD SetExtendedStyle(DWORD dwStyle)
  136. { return SendMessage(TB_SETEXTENDEDSTYLE, 0, dwStyle); }
  137. BOOL GetRect(UINT nIdButton, RECT& rc) const
  138. { return SendMessageC(TB_GETRECT, nIdButton, (LPARAM)&rc); }
  139. DWORD GetToolbarStyle() const
  140. { return SendMessageC(TB_GETSTYLE); }
  141. void SetToolbarStyle(DWORD dwStyle)
  142. { SendMessage(TB_SETSTYLE, 0, dwStyle); }
  143. int HitTest(CPoint p) const
  144. { return SendMessageC(TB_HITTEST, 0, (LPARAM)&p); }
  145. int  GetHotItem() const
  146. { if (GetSafeHwnd()) return SendMessageC(TB_GETHOTITEM); return 0; }
  147. void SetHotItem(int iHot)
  148. { if (GetSafeHwnd()) SendMessage(TB_SETHOTITEM, iHot); }
  149. BOOL MapAccelerator(TCHAR ch, UINT& nID) const
  150. { return SendMessageC(TB_MAPACCELERATOR, (WPARAM)ch, (LPARAM)&nID); }
  151. CSize GetPadding() const
  152. { return SendMessageC(TB_GETPADDING); }
  153. CSize SetPadding(CSize sz) 
  154. { return SendMessage(TB_SETPADDING, 0, MAKELPARAM(sz.cx,sz.cy)); }
  155. protected:
  156. CRect  m_rcOldPos; // used when toolbar is moved
  157. DROPDOWNBUTTON* m_pDropDownButtons; // list of dropdown button/menu pairs
  158. BOOL  m_bNoEntry; // implementation hack
  159. // override to do your own weird drop-down buttons
  160. virtual void OnDropDownButton(const NMTOOLBAR& nmtb, UINT nID, CRect rc);
  161. DROPDOWNBUTTON* FindDropDownButton(UINT nID);
  162. // helpers
  163. virtual void InvalidateOldPos(const CRect& rcInvalid);
  164. afx_msg int  OnCreate(LPCREATESTRUCT lpcs);
  165. afx_msg void OnTbnDropDown(NMHDR* pNMHDR, LRESULT* pRes);
  166. afx_msg void OnWindowPosChanging(LPWINDOWPOS lpWndPos);
  167. afx_msg void OnWindowPosChanged(LPWINDOWPOS lpWndPos);
  168. afx_msg void OnNcCalcSize(BOOL bCalc, NCCALCSIZE_PARAMS* pncp );
  169. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  170. afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpcs);
  171. afx_msg void OnPaint();
  172. DECLARE_MESSAGE_MAP()
  173. DECLARE_DYNAMIC(CFlatToolBar)
  174. };
  175. #endif