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

图形图象

开发平台:

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 __COOLBAR_H
  7. #define __COOLBAR_H
  8. //////////////////
  9. // CCoolBar encapsulates IE common coolbar (rebar) for MFC. To use it,
  10. //
  11. // * derive your own CMyCoolBar from CCoolBar
  12. // * implement OnCreateBands to create whatever bands you want
  13. // * instantiate CMyCoolBar in your frame window as you would a toolbar
  14. // * create and load it, etc from CMainFrame::OnCreate
  15. //
  16. // See MBTest for example of how to use.
  17. //
  18. class CTRL_EXT_CLASS CCoolBar : public CControlBar {
  19. public:
  20. CCoolBar();
  21. virtual ~CCoolBar();
  22. BOOL Create(CWnd* pParentWnd, DWORD dwStyle,
  23. DWORD dwAfxBarStyle = CBRS_ALIGN_TOP,
  24. UINT nID = AFX_IDW_TOOLBAR);
  25. // message wrappers
  26. BOOL GetBarInfo(LPREBARINFO lp)
  27. { ASSERT(::IsWindow(m_hWnd));
  28.   return (BOOL)SendMessage(RB_GETBARINFO, 0, (LPARAM)lp); }
  29. BOOL SetBarInfo(LPREBARINFO lp)
  30. { ASSERT(::IsWindow(m_hWnd));
  31.   return (BOOL)SendMessage(RB_SETBARINFO, 0, (LPARAM)lp); }
  32. BOOL GetBandInfo(int iBand, LPREBARBANDINFO lp)
  33. { ASSERT(::IsWindow(m_hWnd));
  34.   return (BOOL)SendMessage(RB_GETBANDINFO, iBand, (LPARAM)lp); }
  35. BOOL SetBandInfo(int iBand, LPREBARBANDINFO lp)
  36. { ASSERT(::IsWindow(m_hWnd));
  37.   return (BOOL)SendMessage(RB_SETBANDINFO, iBand, (LPARAM)lp); }
  38. BOOL InsertBand(int iWhere, LPREBARBANDINFO lp)
  39. { ASSERT(::IsWindow(m_hWnd));
  40.   return (BOOL)SendMessage(RB_INSERTBAND, (WPARAM)iWhere, (LPARAM)lp); }
  41. BOOL DeleteBand(int nWhich)
  42. { ASSERT(::IsWindow(m_hWnd));
  43.   return (BOOL)SendMessage(RB_DELETEBAND, (WPARAM)nWhich); }
  44. int GetBandCount()
  45. { ASSERT(::IsWindow(m_hWnd));
  46.   return (int)SendMessage(RB_GETBANDCOUNT); }
  47. int GetRowCount()
  48. { ASSERT(::IsWindow(m_hWnd));
  49.      return (int)SendMessage(RB_GETROWCOUNT); }
  50. int GetRowHeight(int nWhich)
  51. { ASSERT(::IsWindow(m_hWnd));
  52.      return (int)SendMessage(RB_GETROWHEIGHT, (WPARAM)nWhich); }
  53. // Call these handy functions from your OnCreateBands to do stuff
  54. // more easily than the Windows way.
  55. //
  56. BOOL InsertBand(CWnd* pWnd, CSize szMin, int cx = 0,
  57. LPCTSTR lpText=NULL, int iWhere=-1, BOOL bNewRow =FALSE);
  58. void SetColors(COLORREF clrFG, COLORREF clrBG);
  59. void SetBackgroundBitmap(CBitmap* pBitmap);
  60. void Invalidate(BOOL bErase = TRUE); // invalidates children too
  61. static BOOL bTRACE; // Set TRUE to see extra diagnostics in DEBUG code
  62. protected:
  63. // YOU MUST OVERRIDE THIS in your derived class to create bands.
  64. virtual BOOL OnCreateBands() = 0; // return -1 if failed
  65. // Virtual fn called when the coolbar height changes as a result of moving
  66. // bands around. Override only if you want to do something different.
  67. virtual void OnHeightChange(const CRect& rcNew);
  68. // overrides to fix problems w/MFC. No need to override yourself.
  69. virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  70. virtual CSize CalcDynamicLayout(int nLength, DWORD nMode);
  71. virtual void  OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  72. // message handlers
  73. afx_msg int  OnCreate(LPCREATESTRUCT lpcs);
  74. afx_msg void OnPaint();
  75. afx_msg void OnHeightChange(NMHDR* pNMHDR, LRESULT* pRes);
  76. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  77. DECLARE_MESSAGE_MAP()
  78. DECLARE_DYNAMIC(CCoolBar)
  79. };
  80. //////////////////
  81. // Programmer-friendly REBARINFO initializes itself.
  82. //
  83. class CRebarInfo : public REBARINFO {
  84. public:
  85. CRebarInfo() {
  86. memset(this, 0, sizeof(REBARINFO));
  87. cbSize = sizeof(REBARINFO);
  88. }
  89. };
  90. //////////////////
  91. // Programmer-friendly REBARBANDINFO initializes itself.
  92. //
  93. class CRebarBandInfo : public REBARBANDINFO {
  94. public:
  95. CRebarBandInfo() {
  96. memset(this, 0, sizeof(REBARBANDINFO));
  97. cbSize = sizeof(REBARBANDINFO);
  98. }
  99. };
  100. #endif