博客
关于我
加强进度控制ProgressCtrlX进度条类
阅读量:545 次
发布时间:2019-03-07

本文共 3787 字,大约阅读时间需要 12 分钟。

翻译来源:

增强的进度控制,支持渐变阴影,格式化文本,动画,工具提示,形状,“snake”和反向模式以及垂直模式

您可以在上找到最新版本和其他代码

示例图像 -  ProgressCtrlX.gif

介绍

在本文中,我想介绍一个增强的ProgressBar控件。我收集了一些想法从文章 和,加了我自己的一些想法和发展这种控制。我试图以最常见,灵活和可扩展的方式开发它。从1.3版本开始,控件分为3个不同的类:CGradient - > CProgress- > CProgressCtrlXCGradient封装梯度绘图功能。CProgress 是进度控件的非窗口版本。它支持进度条的几乎所有功能,可以单独使用。CProgressCtrlX是一个基于MFC进度条的控件,也是源自的CProgress

特征:

  • 填充渐变颜色
  • 多色渐变(无限数量的颜色)
  • 弹力梯度
  • 填充画笔以进行背景和进度指示(覆盖颜色设置)
  • bar上的文字
  • 双色文字
  • 任意角度文字旋转(PBT_ANY_ANGLE)或0-90-180-270度文字旋转(w / o PBT_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

文本格式(设置文字格式使用SetTextFormatHideText):

#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.hMemDC.h

转载地址:http://mdxjz.baihongyu.com/

你可能感兴趣的文章
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>