#ifndef TABBER_H #define TABBER_H class Tabber; class TabberListener { public: virtual void currentSet(Tabber* tabber, int index) = 0; }; class Tabber : public CTabCtrl { public: Tabber(); ~Tabber(); void setListener(TabberListener* l); void insert(int index, CWnd* wnd, const string& text); void remove(int index); void setCurrent(int index); void setTabText(int index, const string& t); int size() const; int getCurrent() const; CWnd* getTabWnd(int index) const; string getTabText(int index) const; DECLARE_DYNAMIC(Tabber) DECLARE_MESSAGE_MAP() afx_msg void OnSize(UINT type, int w, int h); afx_msg BOOL OnEraseBkgnd(CDC* dc); afx_msg void tcn_selChange(NMHDR* p, LRESULT* result); private: TabberListener* listener; struct Tab { CWnd* wnd; string text; Tab(CWnd* w, const string& t) : wnd(w), text(t) {} }; typedef list Tabs; Tabs tabs; int curr; void refresh(); CRect getInnerRect(); Tab* getTab(int index) const; }; #endif