#pragma once | |
002 | #include "PngImage.h" |
003 | #include <vector> |
004 | using namespace std; |
005 | enum BUTTON_STATE |
006 | { |
007 | BUTTON_ENABLE = 0, |
008 | BUTTON_HOVER = 1, |
009 | BUTTON_CLICK = 2, |
010 | BUTTON_CHECK = 3, |
011 | BUTTON_DISABLE= 4, |
012 | }; //按钮状态 |
013 | // PngButton.h |
014 | class ButtonCallback |
015 | { |
016 | public: |
017 | ButtonCallback(){}; |
018 | virtual void callbackId(int id, WPARAM wParam = 0, LPARAM lParam = 0) =NULL; |
019 | }; |
020 | |
021 | class PngButton |
022 | { |
023 | public: |
024 | PngButton(ButtonCallback* pbtnCallback); |
025 | virtual ~PngButton(); |
026 | public: |
027 | INT GetWidth(){return m_nSliceWidth;}; |
028 | INT GetHeight(){return m_nHeight;}; |
029 | void SetButtonImage(LPCTSTR pszFileName,int picStateNum =5); |
030 | void SetButtonImage(HINSTANCE hInstance, LPCTSTR pszResourceName,int picStateNum =5); |
031 | void DrawButton(CDC * pDC); |
032 | void OnLButtonUp(UINT nFlags, CPoint point); |
033 | void OnLButtonDown(UINT nFlags, CPoint point); |
034 | void OnMouseHover(WPARAM wparam, LPARAM lparam); |
035 | void OnMouseLeave(WPARAM wparam, LPARAM lparam); |
036 | |
037 | void setButtonPos(int x,int y); |
038 | CPoint getButtonPos(){return m_Point;}; |
039 | void setEnable(bool enable =true){m_bEnable = enable;} |
040 | BOOL getEnable(){return m_bEnable;}; |
041 | void setVisable(bool visable =true){ m_bVisable = visable;}; |
042 | BOOL getVisable(){return m_bVisable;}; |
043 | BUTTON_STATE getbuttonState(){return m_buttonState;}; |
044 | void setbtnCheck(bool bcheck =false); |
045 | void setBtnID(int id){m_buttonID = id;}; |
046 | |
047 | //鼠标移动事件 |
048 | bool OnMouseMoveEvent(CPoint ClientPoint); |
049 | //鼠标左键事件 |
050 | bool OnLMouseDownEvent(CPoint ClientPoint); |
051 | //鼠标左键事件 |
052 | bool OnLMouseUpEvent(CPoint ClientPoint); |
053 | //鼠标左键事件 |
054 | bool OnLMouseDoubleEvent(CPoint ClientPoint); |
055 | //鼠标右键事件 |
056 | bool OnRMouseDownEvent(CPoint ClientPoint); |
057 | //鼠标右键事件 |
058 | bool OnRMouseUpEvent(CPoint ClientPoint); |
059 | //鼠标右键事件 |
060 | bool OnRMouseDoubleEvent(CPoint ClientPoint); |
061 | |
062 | private: |
063 | BOOL m_bEnable; // 按钮是否禁用 |
064 | BOOL m_bCursorOnButton; // 鼠标是否在按钮上 |
065 | BOOL m_bPress; // 按钮是否被按下 |
066 | BOOL m_bChecked; // checkbutton check状态 |
067 | |
068 | BOOL m_bVisable; |
069 | int m_nWidth; //图片宽 |
070 | int m_nHeight; //图片高 |
071 | int m_statePicNum; |
072 | int m_nSliceWidth; //每一块图片的宽 |
073 | CPngImage m_btnImage; //按钮图片 |
074 | CRect m_rectButton; //按钮区域 |
075 | CPoint m_Point; |
076 | ButtonCallback* m_pbtnCallback; |
077 | BUTTON_STATE m_buttonState; |
078 | int m_buttonID; |
079 | |
080 | }; |
081 | |
082 | typedef vector<pngbutton *> VpngBtn; |
083 | typedef vector</pngbutton><pngbutton *>::iterator VpngBtnItem; |
084 | class PngBtnManager |
085 | { |
086 | public: |
087 | PngBtnManager(){}; |
088 | ~PngBtnManager(); |
089 | void addBtn(PngButton* btn); |
090 | void DrawBtn(CDC *pDc); |
091 | |
092 | //鼠标移动事件 |
093 | bool OnMouseMoveEvent(CPoint ClientPoint); |
094 | //鼠标左键事件 |
095 | bool OnLMouseDownEvent(CPoint ClientPoint); |
096 | //鼠标左键事件 |
097 | bool OnLMouseUpEvent(CPoint ClientPoint); |
098 | //鼠标左键事件 |
099 | bool OnLMouseDoubleEvent(CPoint ClientPoint); |
100 | //鼠标右键事件 |
101 | bool OnRMouseDownEvent(CPoint ClientPoint); |
102 | //鼠标右键事件 |
103 | bool OnRMouseUpEvent(CPoint ClientPoint); |
104 | //鼠标右键事件 |
105 | bool OnRMouseDoubleEvent(CPoint ClientPoint); |
106 | private: |
107 | VpngBtn m_pngbtnManager; |
108 | }; |
109 | |
110 | 可以很方便的添加纯PNG按钮,不需要再用到一个bmp背景啦 。按钮图为5张png图片</pngbutton></vector> |
上一篇:6603房间人数状态设置方法
下一篇:MSSQL数据库日志清理教程
还没有评论,快来说点什么吧~