加强进度控制ProgressCtrlX进度条类



翻译来源:https://www.codeproject.com/Articles/920/Enhanced-Progress-Bar-Control

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

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

示例图像 -  ProgressCtrlX.gif

介绍

在本文中,我想介绍一个增强的ProgressBar控件。我收集了一些想法从文章CodeGuru 和CodeProject上,加了我自己的一些想法和发展这种控制。我试图以最常见,灵活和可扩展的方式开发它。从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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值