UIFlatBar.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
- ////////////////////////////////////////////////////////////////
- // Copyright 1998 Paul DiLascia
- // If this code works, it was written by Paul DiLascia.
- // If not, I don't know who wrote it.
- //
- #ifndef __FLATBAR_H
- #define __FLATBAR_H
- #ifndef TB_SETEXTENDEDSTYLE
- #error FlatBar.h requires a newer version of the SDK than you have!
- #error Please update your SDK files.
- #endif
- #ifndef countof
- #define countof(x) (sizeof(x)/sizeof(x[0]))
- #endif
- #ifndef _tsizeof
- #define _tsizeof(s) sizeof(s)/sizeof(TCHAR)
- #endif
- #include "UIFixTB.h"
- // fwd ref
- struct DROPDOWNBUTTON;
- #define CFlatToolBarBase CFixMFCToolBar
- //////////////////
- // CFlatToolbar is a drop-in replacement for CToolBar that supports
- // flat-style buttons and gripper handles. Use instead of CToolBar in your
- // CMainFrame. CFlatTooBar's don'tK actually have to have the flat style,
- // but they do by default. If you don't want the flat look, you can call
- // ModifyStyle(TBSTYLE_FLAT, 0);
- //
- // CFlatToolBar overcomes various MFC drawing bugs that cause it not to work
- // with flat-style buttons. CFlatToolBar Can also used inside a coolbar
- // (unlike CToolBar).
- //
- // CFlatToolBar has other good stuff too, like an easy way to handle drop-down
- // buttons--See MBTest for example how to use.
- //
- class CTRL_EXT_CLASS CFlatToolBar : public CFlatToolBarBase {
- public:
- CFlatToolBar();
- virtual ~CFlatToolBar();
- static BOOL bTRACE; // to see TRACE diagnostics
- // set these before creation:
- BOOL m_bDrawDisabledButtonsInColor; // draw disabled buttons in color
- BOOL m_bInCoolBar; // set if flatbar is inside coolbar
- // You must call one of these to get the flat look; if not, you must
- // set TBSTYLE_FLAT yourself.
- BOOL LoadToolBar(LPCTSTR lpszResourceName);
- BOOL LoadToolBar(UINT nIDResource)
- { return LoadToolBar(MAKEINTRESOURCE(nIDResource)); }
- // call to add drop-down buttons
- BOOL AddDropDownButton(UINT nIDButton, UINT nIDMenu, BOOL bArrow);
- // Use these to get/set the flat style. By default, LoadToolBar calls
- // SetFlatStyle(TRUE); if you create some other way, you must call it
- // yourself.
- BOOL SetFlatStyle(BOOL bFlat) {
- return ModifyStyle(bFlat ? 0 : TBSTYLE_FLAT, bFlat ? TBSTYLE_FLAT : 0);
- }
- BOOL GetFlatStyle() {
- return (GetStyle() & TBSTYLE_FLAT)!=0;
- }
- // silly function to fake out compiler with const-ness
- LRESULT SendMessageC(UINT m, WPARAM wp=0, LPARAM lp=0) const
- { return ((CFixMFCToolBar*)this)->SendMessage(m, wp, lp); }
- // Wrappers that are not in MFC but should be;
- // I copied these from CToolBarCtrl
- BOOL EnableButton(int nID, BOOL bEnable)
- { return SendMessage(TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0)); }
- BOOL CheckButton(int nID, BOOL bCheck)
- { return SendMessage(TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0)); }
- BOOL PressButton(int nID, BOOL bPress)
- { return SendMessage(TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0)); }
- BOOL HideButton(int nID, BOOL bHide)
- { return SendMessage(TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0)); }
- BOOL Indeterminate(int nID, BOOL bIndeterminate)
- { return SendMessage(TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0)); }
- BOOL IsButtonEnabled(int nID) const
- { return SendMessageC(TB_ISBUTTONENABLED, nID); }
- BOOL IsButtonChecked(int nID) const
- { return SendMessageC(TB_ISBUTTONCHECKED, nID); }
- BOOL IsButtonPressed(int nID) const
- { return SendMessageC(TB_ISBUTTONPRESSED, nID); }
- BOOL IsButtonHidden(int nID) const
- { return SendMessageC(TB_ISBUTTONHIDDEN, nID); }
- BOOL IsButtonIndeterminate(int nID) const
- { return SendMessageC(TB_ISBUTTONINDETERMINATE, nID); }
- BOOL SetState(int nID, UINT nState)
- { return SendMessage(TB_SETSTATE, nID, MAKELPARAM(nState, 0)); }
- int GetState(int nID) const
- { return SendMessageC(TB_GETSTATE, nID); }
- BOOL AddButtons(int nNumButtons, LPTBBUTTON lpButtons)
- { return SendMessage(TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons); }
- BOOL InsertButton(int nIndex, LPTBBUTTON lpButton)
- { return SendMessage(TB_INSERTBUTTON, nIndex, (LPARAM)lpButton); }
- BOOL DeleteButton(int nIndex)
- { return SendMessage(TB_DELETEBUTTON, nIndex); }
- int GetButtonCount() const
- { return SendMessageC(TB_BUTTONCOUNT); }
- UINT CommandToIndex(UINT nID) const
- { return SendMessageC(TB_COMMANDTOINDEX, nID); }
- void Customize()
- { SendMessage(TB_CUSTOMIZE, 0, 0L); }
- int AddStrings(LPCTSTR lpszStrings)
- { return SendMessage(TB_ADDSTRING, 0, (LPARAM)lpszStrings); }
- void SetButtonStructSize(int nSize)
- { SendMessage(TB_BUTTONSTRUCTSIZE, nSize); }
- BOOL SetButtonSize(CSize sz)
- { return SendMessage(TB_SETBUTTONSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
- BOOL SetBitmapSize(CSize sz)
- { return SendMessage(TB_SETBITMAPSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
- void AutoSize()
- { SendMessage(TB_AUTOSIZE); }
- CToolTipCtrl* GetToolTips() const
- { return (CToolTipCtrl*)CWnd::FromHandle((HWND)SendMessageC(TB_GETTOOLTIPS)); }
- void SetToolTips(CToolTipCtrl* pTip)
- { SendMessage(TB_SETTOOLTIPS, (WPARAM)pTip->m_hWnd); }
- // NO!!!--this is not the same as the MFC owner
- // void SetOwner(CWnd* pWnd)
- // { SendMessage(TB_SETPARENT, (WPARAM)pWnd->m_hWnd); }
- void SetRows(int nRows, BOOL bLarger, LPRECT lpRect)
- { SendMessage(TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect); }
- int GetRows() const
- { return (int) SendMessageC(TB_GETROWS); }
- BOOL SetCmdID(int nIndex, UINT nID)
- { return SendMessage(TB_SETCMDID, nIndex, nID); }
- UINT GetBitmapFlags() const
- { return (UINT) SendMessageC(TB_GETBITMAPFLAGS); }
- // Wrappers for some of the newer messages--not complete
- BOOL SetIndent(int indent)
- { return SendMessage(TB_SETINDENT, indent); }
- HIMAGELIST GetImageList() const
- { return (HIMAGELIST)SendMessageC(TB_GETIMAGELIST); }
- HIMAGELIST SetImageList(HIMAGELIST hImgList)
- { return (HIMAGELIST)SendMessage(TB_SETIMAGELIST, 0, (LPARAM)hImgList); }
- int GetBitmap(UINT nIdButton) const
- { return SendMessageC(TB_GETBITMAP, nIdButton); }
- DWORD SetExtendedStyle(DWORD dwStyle)
- { return SendMessage(TB_SETEXTENDEDSTYLE, 0, dwStyle); }
- BOOL GetRect(UINT nIdButton, RECT& rc) const
- { return SendMessageC(TB_GETRECT, nIdButton, (LPARAM)&rc); }
- DWORD GetToolbarStyle() const
- { return SendMessageC(TB_GETSTYLE); }
- void SetToolbarStyle(DWORD dwStyle)
- { SendMessage(TB_SETSTYLE, 0, dwStyle); }
- int HitTest(CPoint p) const
- { return SendMessageC(TB_HITTEST, 0, (LPARAM)&p); }
- int GetHotItem() const
- { if (GetSafeHwnd()) return SendMessageC(TB_GETHOTITEM); return 0; }
- void SetHotItem(int iHot)
- { if (GetSafeHwnd()) SendMessage(TB_SETHOTITEM, iHot); }
- BOOL MapAccelerator(TCHAR ch, UINT& nID) const
- { return SendMessageC(TB_MAPACCELERATOR, (WPARAM)ch, (LPARAM)&nID); }
- CSize GetPadding() const
- { return SendMessageC(TB_GETPADDING); }
- CSize SetPadding(CSize sz)
- { return SendMessage(TB_SETPADDING, 0, MAKELPARAM(sz.cx,sz.cy)); }
- protected:
- CRect m_rcOldPos; // used when toolbar is moved
- DROPDOWNBUTTON* m_pDropDownButtons; // list of dropdown button/menu pairs
- BOOL m_bNoEntry; // implementation hack
- // override to do your own weird drop-down buttons
- virtual void OnDropDownButton(const NMTOOLBAR& nmtb, UINT nID, CRect rc);
- DROPDOWNBUTTON* FindDropDownButton(UINT nID);
- // helpers
- virtual void InvalidateOldPos(const CRect& rcInvalid);
- afx_msg int OnCreate(LPCREATESTRUCT lpcs);
- afx_msg void OnTbnDropDown(NMHDR* pNMHDR, LRESULT* pRes);
- afx_msg void OnWindowPosChanging(LPWINDOWPOS lpWndPos);
- afx_msg void OnWindowPosChanged(LPWINDOWPOS lpWndPos);
- afx_msg void OnNcCalcSize(BOOL bCalc, NCCALCSIZE_PARAMS* pncp );
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpcs);
- afx_msg void OnPaint();
- DECLARE_MESSAGE_MAP()
- DECLARE_DYNAMIC(CFlatToolBar)
- };
- #endif