📄 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
//
#include <vector>
using 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<CNOutBarItem *> 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<CNOutBarFolder *> 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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -