- 下载源文件 - 22 Kb
- 下载演示项目 - 109 Kb
您可以在我的主页上找到最新版本和其他代码。
介绍
在本文中,我想介绍一个增强的ProgressBar控件。我收集了一些想法从文章CodeGuru 和CodeProject上,加了我自己的一些想法和发展这种控制。我试图以最常见,灵活和可扩展的方式开发它。从1.3版本开始,控件分为3个不同的类:CGradient
- > CProgress
- > CProgressCtrlX
。类CGradient
封装梯度绘图功能。CProgress
是进度控件的非窗口版本。它支持进度条的几乎所有功能,可以单独使用。CProgressCtrlX
是一个基于MFC进度条的控件,也是源自的CProgress
。
特征:
- 填充渐变颜色
- 多色渐变(无限数量的颜色)
- 弹力梯度
- 填充画笔以进行背景和进度指示(覆盖颜色设置)
- bar上的文字
- 双色文字
- 任意角度文字旋转(
PBT_ANY_ANGLE
)或0-90-180-270度文字旋转(w / oPBT_ANY_ANGLE
) - 文本对齐(右,左,上,下,中,垂直居中)
- 字体设置支持
- 格式化文本(可以显示百分比,位置或纯文本)
- 文本绑定到进度指示器
- 支持垂直方向控制
- 反向模式
- snake模式
- 边框
- 形状模式(
CRgnX
从样本使用,从位图和文本创建rgn) - 具有文本格式的工具提示
- 调色板支持256色模式(可选)
- 渐变动画和拉伸
- ...........
高级接口:
文本对齐(用于设置文本对齐样式SetTextAlign
)
隐藏
复制代码
#define PBS_LEFT 0x0010L #define PBS_RIGHT 0x0020L #define PBS_CENTER 0x0030L #define PBS_TOP 0x0040L #define PBS_BOTTOM 0x0080L #define PBS_VCENTER 0x00C0L
文本格式(设置文字格式使用SetTextFormat
和HideText
):
隐藏
复制代码
#define PBS_SHOW_PERCENT 0x0100 #define PBS_SHOW_POSITION 0x0200 #define PBS_SHOW_TEXTONLY 0x0300
控制风格(使用ModifyBarStyle
或专用功能):
隐藏
复制代码
#define PBS_TIED_TEXT 0x1000 #define PBS_RUBBER_BAR 0x2000 #define PBS_REVERSE 0x4000 #define PBS_SNAKE 0x8000
高级功能:
隐藏
复制代码
CGradient: void SetStretchGradient(float flStretchFactor = 1); // useful for animation float GetStretchGradient(); void SetGradientColors(COLORREF clrStart, COLORREF clrEnd); void GetGradientColors(COLORREF& clrStart, COLORREF& clrEnd); void SetGradientColorsX(int nCount, COLORREF clrFirst, COLORREF clrNext, ...); const CDWordArray& GetGradientColorsX(); void AddColor(COLORREF clr); void SetCreatePalette(BOOL fCreate =TRUE); BOOL GetCreatePalette(); CPalette& GetPalette();
隐藏
收缩
复制代码
CProgress: void SetBarBrush(CBrush* pbrBar); CBrush* GetBarBrush(); void SetBkColor(COLORREF clrBk); COLORREF GetBkColor(); void SetBkBrush(CBrush* pbrBk); CBrush* GetBkBrush(); void SetTextColor(COLORREF clrTextOnBar, COLORREF clrTextOnBk = -1); COLORREF GetTextColor(); COLORREF GetTextColorOnBk(); void SetShowPercent(BOOL fShowPercent = TRUE); BOOL GetShowPercent(); void SetTextAlign(DWORD dwStyle); DWORD GetTextAlign(); void SetTextFormat(LPCTSTR szFormat, DWORD ffFormat = PBS_SHOW_TEXTONLY); void HideText(); void SetTiedText(BOOL fTiedText = TRUE); BOOL GetTiedText(); void SetRubberBar(BOOL fRubberBar = TRUE); BOOL GetRubberBar(); void SetReverse(BOOL fReverse = TRUE); BOOL GetReverse(); void SetSnake(BOOL fSnake = TRUE); BOOL GetSnake(); void SetSnakeTail(int nTailSize); int GetSnakeTail(); void SetBorders(const CRect& rcBorders); const CRect& GetBorders(); void SetShape(HBITMAP hBmp, COLORREF clrTransparent = 0); void SetRange(int nLower, int nUpper); void GetRange(int& nLower, int& nUpper); int GetPos() {return m_nPos;} int SetPos(int nPos); int OffsetPos(int nIncrement); int SetStep(int nStep); int StepIt(); void SetFont(CFont* pFont); CFont* GetFont(); void Draw(CDC* pDC, CRect rcDraw, BOOL fSkipDCCache = FALSE); virtual DWORD GetBarStyle(); virtual void ModifyBarStyle(DWORD dwRemove, DWORD dwAdd); void Animate(int nStep); void ResetAnimation();
隐藏
复制代码
CProgressCtrlX: void SetTooltipFormat (LPCTSTR lpszToolTipText, DWORD fFormat = PBS_SHOW_TEXTONLY); LPCTSTR GetTooltipText(); void HideTooltip(); void RunSnake(int nMsPerStep); void StopSnake(); void RunAnimation(int nMsPerStep, int nStep); void StopAnimation();
您可以使用:
SetFont()
- 设置文本的字体和旋转(躲避)SetStyle()
,ModifyStyle()
,SetBarStyle()
,ModifyBarStyle()
-改变风格控制- 基类的任何功能
CProgressCtrl
有关使用的其他信息,请参阅测试项目。
笔记
HighColor(15/16位)和TrueColor(24/32位)分辨率的最佳视图和性能。控制也支持256和16种颜色模式。但是,在16种颜色模式下,您不能使用渐变,而在256色模式下,由于使用CreateSolidBrush/FillRect
代替,控件的工作速度较慢FillSolidRect
。
如果要将文本旋转到任何角度 - 定义 PBT_ANY_ANGLE
并重新编译控件。
控制是UIBits.dll的一部分,独立使用需要额外的文件: DrawGdiX.h,MemDC.h