www.pudn.com > 200308141526117224仿MSN(网易泡泡)界面.rar > OutBarCtrl.h
#if !defined(AFX_CNOutBarCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_) #define AFX_CNOutBarCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // CNOutBarCtrl.h : header file // #includeusing namespace std; /* * CNOutBarCtrl listener that will be notified when certain message ocurrs */ class CNOutBarListener { public: virtual void renamed(int obj, int index, const char *text) = 0; virtual void itemDragged(int item, int toFolder) = 0; virtual void selFolderChanged(int folder) = 0; virtual void itemClicked(int item) = 0; virtual void itemDoubleClicked(int item) = 0; virtual void rightButtonDown(int obj, int index) = 0; }; class CNOutBarItem { public: CNOutBarItem(const char *t, int img) : text(t), image(img) {} virtual ~CNOutBarItem() {} CString text; int image; }; class CNOutBarFolder { public: CNOutBarFolder(const char *t) : text(t) { scrollPos = 0; } ~CNOutBarFolder(); void addItem(const char *t, int image); CString text; vector items; int scrollPos; }; #define FOLDER_HEIGHT 22 #define LARGE_ICON_W 32 #define LARGE_ICON_H 32 #define SMALL_ICON_W 16 #define SMALL_ICON_H 16 #define ICON_OFFSET 5 #define LARGE_ITEM_H 48 #define SMALL_ITEM_H 22 // obj and index make up a HIT. typedef int HIT; #define MAKEHIT(obj, index) ((obj << 16) + index) #define HITOBJ(hit) (hit >> 16) #define HITINDEX(hit) (hit & 0xffff) #define HITNONE MAKEHIT(HT_NONE, -1) class CNOutBarEdit; ///////////////////////////////////////////////////////////////////////////// // CNOutBarCtrl window class CNOutBarCtrl : public CWnd { // Construction public: enum { HT_NONE, HT_FOLDER, HT_ITEM, HT_SCROLL }; CNOutBarCtrl(); // Attributes public: void setListener(CNOutBarListener *l) { listener = l; } int getFolderCount() { return folders.size(); } int getSelFolder() { return selFolder; } void getFolderName(int i, CString &name); int getItemCount() { return getItemCount(selFolder); } int getItemCount(int folder); void setBgColor(COLORREF color) { bgColor = color; repaintInsideRect(); } void setFontColor(COLORREF color) { fontColor = color; repaintInsideRect(); } void setImageList(CImageList *largeList, CImageList *smallList) { largeIcons = largeList; smallIcons = smallList; } BOOL isLargeIconView() { return largeIconView; } void setIconView(BOOL large) { largeIconView = large; repaintInsideRect(); } int hitObj() { return HITOBJ(lastHit); } int hitIndex() { return HITINDEX(lastHit); } // Operations public: void scrollToPos(int i) { scrollPos() = i; repaintInsideRect(); } void removeItem(int i) { removeItem(selFolder, i); } void removeFolder(int i); void removeAllFolders(); void removeItem(int folder, int i); void repaintInsideRect(); void setSelFolder(int i); int addFolder(const char *text); void addItem(int folder, const char *text, int image); void insertItem(int folder, int pos, CNOutBarItem *item); void addFolderUI(); void renameUI(); void resizeEditCtrl(); void onEditFinished(); void onEditCanceled(); protected: enum { SCROLL_DIR_UP, SCROLL_DIR_DOWN }; virtual int getMaxItem(); virtual void drawBackground(CDC *pDC, CRect &rc); virtual void drawItemText(CDC *pDC, int i, COLORREF color); virtual void drawFolder(CDC *pDC, int i, BOOL pressed = FALSE, BOOL hilight = FALSE); virtual void drawScroll(CDC *pDC, int i, BOOL pressed = FALSE); int getCountPerPage(); int getMaxVisibleItem(); void getFolderRect(CRect &rc, int i); void getInsideRect(CRect &rc); void getItemRect(CRect &rc, int i); void getIconRect(CRect &rc, int i); void getLabelRect(CRect &rc, int i); void getScrollRect(CRect &rc, int i); void drawAll(CDC *pDC); void drawItem(CDC *pDC, int i, BOOL redraw = FALSE); void drawItemImage(CDC *pDC, int i, CRect &rc); void drawFolderText(CDC *pDC, int i, CRect &rc); void animateFolder(int from, int to); void hilightItem(CDC *pDC, int i, BOOL pressed = FALSE); HIT hitTest(const CPoint &pt); BOOL canScroll(int dir); void scroll(int dir, int delta = 1); int &scrollPos(); CNOutBarListener *listener; CImageList *largeIcons; CImageList *smallIcons; vector folders; int selFolder; COLORREF bgColor; COLORREF fontColor; HIT lastHit; HIT pressedHit; int clickedItem; int dragItem; BOOL largeIconView; CNOutBarEdit *editCtrl; HCURSOR currentCursor; HCURSOR handCursor; HCURSOR forbiddenCursor; HCURSOR dragCursor; // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CNOutBarCtrl) //}}AFX_VIRTUAL // Implementation public: virtual ~CNOutBarCtrl(); // Generated message map functions protected: //{{AFX_MSG(CNOutBarCtrl) afx_msg void OnPaint(); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CNOutBarCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_)