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

工具条

开发平台:

Visual C++

  1. #ifndef __TBAR_H__
  2. #define __TBAR_H__
  3. #ifndef __AFXWIN_H__
  4.   #include <afxwin.h>
  5. #endif
  6. #ifndef __AFXDISP_H__
  7.   #include <afxdisp.h>
  8. #endif
  9. #include "ControlBarEx.h"
  10. /////////////////////////////////////////////////////////////////////////////
  11. class CToolBarCtrlEx;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CToolBarEx
  14. class CToolBarEx : public CControlBarEx
  15. {
  16.   DECLARE_DYNAMIC(CToolBarEx)
  17. // Construction
  18. public:
  19.   CToolBarEx();
  20.   BOOL Create(CWnd* pParentWnd,
  21.     DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,
  22.     UINT nID = AFX_IDW_TOOLBAR);
  23.   BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT,
  24.     DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,
  25.     CRect rcBorders = CRect(0, 0, 0, 0),
  26.     UINT nID = AFX_IDW_TOOLBAR);
  27.   void SetSizes(SIZE sizeButton, SIZE sizeImage);
  28.     // button size should be bigger than image
  29.   void SetHeight(int cyHeight);
  30.     // call after SetSizes, height overrides bitmap size
  31.   BOOL LoadToolBar(LPCTSTR lpszResourceName);
  32.   BOOL LoadToolBar(UINT nIDResource)
  33.   { return LoadToolBar(MAKEINTRESOURCE(nIDResource)); }
  34.   BOOL LoadBitmap(LPCTSTR lpszResourceName);
  35.   BOOL LoadBitmap(UINT nIDResource)
  36.   { return LoadBitmap(MAKEINTRESOURCE(nIDResource)); }
  37.   BOOL SetBitmap(HBITMAP hbmImageWell);
  38.   BOOL SetButtons(const UINT* lpIDArray, int nIDCount);
  39.     // lpIDArray can be NULL to allocate empty buttons
  40. // Attributes
  41. public:
  42.   // standard control bar things
  43.   int CommandToIndex(UINT nIDFind) const;
  44.   UINT GetItemID(int nIndex) const;
  45.   virtual void GetItemRect(int nIndex, LPRECT lpRect) const;
  46.   UINT GetButtonStyle(int nIndex) const;
  47.   void SetButtonStyle(int nIndex, UINT nStyle);
  48.   // for changing button info
  49.   void GetButtonInfo(int nIndex, UINT& nID, UINT& nStyle, int& iImage) const;
  50.   void SetButtonInfo(int nIndex, UINT nID, UINT nStyle, int iImage);
  51.   BOOL SetButtonText(int nIndex, LPCTSTR lpszText);
  52.   CString GetButtonText(int nIndex) const;
  53.   void GetButtonText(int nIndex, CString& rString) const;
  54.   // for direct access to the underlying common control
  55.   CToolBarCtrl& GetToolBarCtrl() const
  56.   { return *(CToolBarCtrl*)this; }
  57. // Implementation
  58. public:
  59.   virtual ~CToolBarEx();
  60.   virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  61.   virtual CSize CalcDynamicLayout(int nLength, DWORD nMode);
  62.   virtual int OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  63.   virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  64.   void SetOwner(CWnd* pOwnerWnd);
  65.   BOOL AddReplaceBitmap(HBITMAP hbmImageWell);
  66.   virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
  67. #ifdef _DEBUG
  68.   virtual void AssertValid() const;
  69.   virtual void Dump(CDumpContext& dc) const;
  70. #endif
  71. protected:
  72.   HRSRC m_hRsrcImageWell; // handle to loaded resource for image well
  73.   HINSTANCE m_hInstImageWell; // instance handle to load image well from
  74.   HBITMAP m_hbmImageWell; // contains color mapped button images
  75.   BOOL m_bDelayedButtonLayout; // used to manage when button layout should be done
  76.   CSize m_sizeImage;  // current image size
  77.   CSize m_sizeButton; // current button size
  78.   CMapStringToPtr* m_pStringMap;  // used as CMapStringToUInt
  79.   // implementation helpers
  80.   void _GetButton(int nIndex, TBBUTTON* pButton) const;
  81.   void _SetButton(int nIndex, TBBUTTON* pButton);
  82.   CSize CalcLayout(DWORD nMode, int nLength = -1);
  83.   CSize CalcSize(TBBUTTON* pData, int nCount);
  84.   int WrapToolBar(TBBUTTON* pData, int nCount, int nWidth);
  85.   void SizeToolBar(TBBUTTON* pData, int nCount, int nLength, BOOL bVert = FALSE);
  86.   void Layout(); // called for for delayed button layout
  87.   //{{AFX_MSG(CToolBarEx)
  88.   afx_msg UINT OnNcHitTest(CPoint);
  89.   afx_msg void OnNcPaint();
  90.   afx_msg void OnPaint();
  91.   afx_msg void OnNcCalcSize(BOOL, NCCALCSIZE_PARAMS*);
  92.   afx_msg void OnWindowPosChanging(LPWINDOWPOS);
  93.   afx_msg void OnSysColorChange();
  94.   afx_msg LRESULT OnSetButtonSize(WPARAM, LPARAM);
  95.   afx_msg LRESULT OnSetBitmapSize(WPARAM, LPARAM);
  96.   afx_msg BOOL OnNcCreate(LPCREATESTRUCT);
  97.   afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  98.   //}}AFX_MSG
  99.   DECLARE_MESSAGE_MAP()
  100.   LRESULT OnSetSizeHelper(CSize& size, LPARAM lParam);
  101. };
  102. // Styles for toolbar buttons
  103. #define TBBS_BUTTON     MAKELONG(TBSTYLE_BUTTON, 0) // this entry is button
  104. #define TBBS_SEPARATOR  MAKELONG(TBSTYLE_SEP, 0)    // this entry is a separator
  105. #define TBBS_CHECKBOX   MAKELONG(TBSTYLE_CHECK, 0)  // this is an auto check button
  106. #define TBBS_GROUP      MAKELONG(TBSTYLE_GROUP, 0)  // marks the start of a group
  107. #define TBBS_CHECKGROUP (TBBS_GROUP|TBBS_CHECKBOX)  // normal use of TBBS_GROUP
  108. #define TBBS_DROPDOWN   MAKELONG(TBSTYLE_DROPDOWN, 0) // drop down style
  109. #define TBBS_AUTOSIZE   MAKELONG(TBSTYLE_AUTOSIZE, 0) // autocalc button width
  110. #define TBBS_NOPREFIX   MAKELONG(TBSTYLE_NOPREFIX, 0) // no accel prefix for this button
  111. // styles for display states
  112. #define TBBS_CHECKED    MAKELONG(0, TBSTATE_CHECKED)    // button is checked/down
  113. #define TBBS_PRESSED    MAKELONG(0, TBSTATE_PRESSED)    // button is being depressed
  114. #define TBBS_DISABLED   MAKELONG(0, TBSTATE_ENABLED)    // button is disabled
  115. #define TBBS_INDETERMINATE  MAKELONG(0, TBSTATE_INDETERMINATE)  // third state
  116. #define TBBS_HIDDEN     MAKELONG(0, TBSTATE_HIDDEN) // button is hidden
  117. #define TBBS_WRAPPED    MAKELONG(0, TBSTATE_WRAP)   // button is wrapped at this point
  118. #define TBBS_ELLIPSES   MAKELONG(0, TBSTATE_ELIPSES)
  119. #define TBBS_MARKED     MAKELONG(0, TBSTATE_MARKED)
  120. #endif //__TBCTL_H__
  121. /////////////////////////////////////////////////////////////////////////////