#ifndef SKIN_TOOLBAR_EAD_FILE #define SKIN_TOOLBAR_EAD_FILE #pragma once #include "SkinUI.h" #include "ISkinControl.h" // CSkinToolBar #define STBI_STYLE_BUTTON 0x0000 #define STBI_STYLE_SEPARTOR 0x0001 #define STBI_STYLE_CHECK 0x0002 #define STBI_STYLE_DROPDOWN 0x0008 #define STBI_STYLE_WHOLEDROPDOWN 0x0080 // STBI_STYLE_WHOLEDROPDOWN不要和STBI_STYLE_CHECK一起用 // STBI_STYLE_DROPDOWN不要和STBI_STYLE_WHOLEDROPDOWN一起用 class CSkinToolBarItem { public: CSkinToolBarItem(void); ~CSkinToolBarItem(void); public: int m_nID; DWORD m_dwStyle; int m_nWidth, m_nHeight; int m_nLeftWidth, m_nRightWidth; int m_nPadding; CString m_strText; CString m_strToolTipText; BOOL m_bChecked; CImageEx * m_lpBgImgN, * m_lpBgImgH, * m_lpBgImgD; CImageEx * m_lpLeftH, * m_lpLeftD; CImageEx * m_lpRightH, * m_lpRightD; CImageEx * m_lpSepartorImg; CImageEx * m_lpArrowImg; CImageEx * m_lpIconImg; }; ////////////////////////////////////////////////////////////////////////// class SKINUI_CLASS CSkinToolBar : public CWnd,public ISkinControl { DECLARE_DYNAMIC(CSkinToolBar) protected: CToolTipCtrl m_ToolTipCtrl; std::vector m_arrItems; CImageEx * m_lpBgImg; int m_nPressIndex, m_nHoverIndex; BOOL m_bPressLorR, m_bHoverLorR; BOOL m_bMouseTracking; int m_nLeft, m_nTop; BOOL m_bAutoSize; //函数定义 public: //构造函数 CSkinToolBar(); //析构函数 virtual ~CSkinToolBar(); //重载函数 protected: //设置属性 virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue); //设置属性 virtual void ParseItem(CXmlNode *root); //创建控件 virtual BOOL CreateControl(CWnd* pParentWnd); //资源加载 public: //背景资源 BOOL SetItemBgPic(int nIndex, LPCTSTR lpNormal, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart); //左边背景 BOOL SetItemLeftBgPic(int nIndex, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart); //右边背景 BOOL SetItemRightBgPic(int nIndex, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart); //分离图片 BOOL SetItemSepartorPic(int nIndex, LPCTSTR lpszFileName); //箭头图片 BOOL SetItemArrowPic(int nIndex, LPCTSTR lpszFileName); //图标资源 BOOL SetItemIconPic(int nIndex, LPCTSTR lpszFileName); //背景资源 BOOL SetBgPic(LPCTSTR lpszFileName, CONST LPRECT lprcNinePart); //功能函数 public: //左上角位置 void SetLeftTop(int nLeft, int nTop); //自动尺寸 void SetAutoSize(BOOL bAutoSize); //添加节点 int AddItem(int nID, DWORD dwStyle); //设置风格 void SetItemStyle(int nIndex, int dwStyle); //节点ID void SetItemID(int nIndex, int nID); //节点大小 void SetItemSize(int nIndex, int nWidth, int nHeight, int nLeftWidth = 0, int nRightWidth = 0); //节点偏移 void SetItemPadding(int nIndex, int nPadding); //节点文本 void SetItemText(int nIndex, LPCTSTR lpszText); //提示标签 void SetItemToolTipText(int nIndex, LPCTSTR lpszText); //获取矩形 BOOL GetItemRectByIndex(int nIndex, CRect& rect); //获取矩形 BOOL GetItemRectByID(int nID, CRect& rect); //获取check BOOL GetItemCheckState(int nIndex); //设置check void SetItemCheckState(int nIndex, BOOL bChecked); //获取节点 CSkinToolBarItem * GetItemByIndex(int nIndex); //获取节点 CSkinToolBarItem * GetItemByID(int nID); //点击测试 int HitTest(POINT pt); //绘图节点 void DrawItem(CDC*pDC, int nIndex); //消息函数 public: //擦出背景 afx_msg BOOL OnEraseBkgnd(CDC* pDC); //重绘消息 afx_msg void OnPaint(); //左键按下 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //左键抬起 afx_msg void OnLButtonUp(UINT nFlags, CPoint point); //鼠标移动 afx_msg void OnMouseMove(UINT nFlags, CPoint point); //鼠标离开 afx_msg LRESULT OnMouseLeave(WPARAM wparam, LPARAM lparam); //窗口销毁 afx_msg void OnDestroy(); //消息循环 virtual BOOL PreTranslateMessage(MSG* pMsg); //创建控件 virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID); protected: DECLARE_MESSAGE_MAP() }; #endif