Ftab.h
上传用户:wenjimin
上传日期:2014-08-12
资源大小:111k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // MSDN Magazine -- October 2002
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. // Compiles with Visual Studio 6.0 on Windows XP. Tab size=3.
  6. //
  7. #pragma once
  8. // folder tab control style flags
  9. #define FTS_FULLBORDER 0x1 // draw full border
  10. #define FTS_BUTTONS    0x2 // draw next/prev buttons
  11. enum { FTN_TABCHANGED = 1 };  // notification: tab changed
  12. enum { FTBPREV=1, FTBNEXT };  // folder button IDs
  13. struct NMFOLDERTAB : public NMHDR {  // notification struct
  14. int iItem;  // item index
  15. LPCTSTR lpText;  // tab text
  16. };
  17. class CFolderTab; // fwd ref
  18. //////////////////
  19. // Next/prev folder button to navigate tabs when they don't all fit
  20. //
  21. class CFolderButton : public CButton
  22. {
  23. public:
  24. BOOL Create(DWORD dwStyle, CWnd* pParent, const RECT& rc, UINT nID) {
  25. return CButton::Create(NULL, dwStyle|BS_OWNERDRAW, rc, pParent, nID);
  26. }
  27. protected:
  28. int  m_nTimerClick;  // for initial scroll delay
  29. // paint function
  30. virtual void DrawItem(LPDRAWITEMSTRUCT lpDis);
  31. afx_msg void OnPaint();
  32. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  33. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  34. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint pt);
  35. afx_msg void OnTimer(UINT nIDEvent);
  36. DECLARE_DYNAMIC(CFolderButton);
  37. DECLARE_MESSAGE_MAP()
  38. };
  39. //////////////////
  40. // Folder tab control, similar to tab control
  41. //
  42. class CFolderTabCtrl : public CWnd 
  43. {
  44. protected:
  45. CFolderButton m_wndButton[2];  // folder buttons
  46. CPtrList m_lsTabs;  // array of CFolderTabs
  47. DWORD m_dwFtabStyle;  // folder tab style flags
  48. int m_iCurItem;  // current selected tab
  49. CFont m_fontNormal;  // current font, normal ntab
  50. CFont m_fontSelected;  // current font, selected tab
  51. int m_cxDesired;  // exact fit width
  52. int m_cxButtons;  // width of buttons
  53. int m_iFirstTab;  // first tab to show
  54. // helpers
  55. void InvalidateTab(int iTab, BOOL bErase=TRUE);
  56. void DrawTabs(CDC& dc, const CRect& rc);
  57. void UpdateButtons();
  58. CFolderTab* GetTab(int iPos);
  59. public:
  60. CFolderTabCtrl();
  61. virtual ~CFolderTabCtrl();
  62. BOOL CreateFromStatic(UINT nID, CWnd* pParent);
  63. virtual BOOL Create(DWORD dwWndStyle,
  64.                 const RECT& rc,
  65. CWnd* pParent,
  66. UINT nID,
  67. DWORD dwFtabStyle=0);
  68. virtual BOOL Load(UINT nIDRes);
  69. int GetSelectedItem() { return m_iCurItem; }
  70. int GetItemCount() { return m_lsTabs.GetCount(); }
  71. int GetDesiredWidth() { return m_cxDesired; }
  72. int GetDesiredHeight() { return GetSystemMetrics(SM_CYHSCROLL); }
  73. BOOL  AddItem(LPCTSTR lpszText);
  74. BOOL  RemoveItem(int iPos);
  75. void RecomputeLayout();
  76. int HitTest(CPoint pt);
  77. int SelectItem(int iTab);
  78. void SetFonts(CFont& fontNormal, CFont& fontSelected);
  79. LPCTSTR GetItemText(int iItem);
  80. void    SetItemText(int iItem, LPCTSTR lpText);
  81. protected:
  82. afx_msg int  OnCreate(LPCREATESTRUCT lpcs);
  83. afx_msg void OnSize(UINT nType, int cx, int cy);
  84. afx_msg void OnPaint();
  85. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  86. afx_msg void OnNextTab();
  87. afx_msg void OnPrevTab();
  88. DECLARE_DYNAMIC(CFolderTabCtrl);
  89. DECLARE_MESSAGE_MAP()
  90. };