HiEasyX  Ver 0.3.0
EasyX 全面扩展库
HiEasyX::ProgressCtrl类 参考

进度条控件 更多...

#include <ProgressCtrl.h>

类 HiEasyX::ProgressCtrl 继承关系图:
HiEasyX::ControlBase HiEasyX::Container

Public 成员函数

 ProgressCtrl ()
 
 ProgressCtrl (int x, int y, int w, int h, int len)
 
virtual int GetContentLength () const
 获取内容长度 更多...
 
virtual void SetContentLength (int len)
 设置内容长度 更多...
 
virtual int GetProcess () const
 获取进度(内容长度即为总进度) 更多...
 
virtual void SetProcess (int pos)
 设置进度(内容长度即为总进度) 更多...
 
virtual void Step ()
 进度加一 更多...
 
virtual COLORREF GetBarColor () const
 获取进度条颜色 更多...
 
virtual void SetBarColor (COLORREF cBar)
 设置进度条颜色 更多...
 
virtual bool GetAnimationState () const
 获取动画启用状态 更多...
 
virtual void EnableAnimation (bool enable)
 设置是否启用动画 更多...
 
void Draw (bool draw_child=true) override
 绘制控件 更多...
 
- Public 成员函数 继承自 HiEasyX::ControlBase
 ControlBase ()
 
 ControlBase (std::wstring wstrText)
 
 ControlBase (int x, int y, int w=0, int h=0, std::wstring wstrText=L"")
 
virtual ~ControlBase ()
 
ControlBaseGetParent ()
 
virtual void SetParent (ControlBase *p)
 设置父控件(父控件调用 AddChild) 更多...
 
virtual bool IsAutoSizeForChild () const
 
virtual void EnableAutoSizeForChild (bool enable)
 为子控件自动改变大小以容纳控件(不容纳负坐标部分) 更多...
 
std::list< ControlBase * > & GetChildList ()
 
size_t GetChildCount ()
 获取子控件总数 更多...
 
virtual void AddChild (ControlBase *p, int offset_x=0, int offset_y=0)
 
virtual void RemoveChild (ControlBase *p)
 
virtual bool IsEnabled () const
 
virtual void SetEnable (bool enable)
 
virtual bool IsVisible () const
 
virtual void SetVisible (bool visible)
 
virtual bool GetAutoRedrawState () const
 
virtual void EnableAutoRedraw (bool enable)
 启用自动重绘(接受到基础消息事件时自动标识需要重绘) 更多...
 
virtual CanvasGetCanvas ()
 
virtual COLORREF GetBkColor () const
 
virtual void SetBkColor (COLORREF color)
 
virtual COLORREF GetTextColor () const
 
virtual void SetTextColor (COLORREF color)
 
virtual void EnableBorder (bool bEnableBorder, COLORREF color=BLACK, int thickness=1)
 
virtual void SetAlpha (BYTE alpha, bool bUseCanvasAlpha, bool isAlphaCalculated)
 
virtual std::wstring GetText () const
 
virtual void SetText (std::wstring wstr)
 
virtual void Draw_Text (int nTextOffsetX=0, int nTextOffsetY=0)
 
virtual void Redraw ()
 重绘控件 更多...
 
virtual void Render (Canvas *dst, RECT *pRct=nullptr, int *pCount=0)
 渲染控件到外部 更多...
 
virtual void SetMsgProcFunc (MESSAGE_PROC_FUNC func)
 设置消息响应函数 更多...
 
virtual void SetMsgProcFunc (MESSAGE_PROC_FUNC_CLASS static_class_func, void *_this)
 设置消息响应函数为静态类函数 更多...
 
virtual void UpdateMessage (ExMessage msg)
 更新消息 更多...
 
virtual bool IsHovered () const
 判断鼠标是否悬停 更多...
 
virtual bool IsFocused () const
 判断是否拥有焦点 更多...
 
virtual bool IsPressed () const
 判断是否按下 更多...
 
- Public 成员函数 继承自 HiEasyX::Container
 Container ()
 
virtual ~Container ()
 
RECT GetRect () const
 
void SetRect (int x, int y, int w, int h)
 设置位置和宽高 更多...
 
void SetRect (RECT rct)
 设置矩形区域 更多...
 
POINT GetPos () const
 
int GetX () const
 
int GetY () const
 
void SetPos (int x, int y)
 
void SetPos (POINT pt)
 
void Move (int x, int y)
 
void MoveRel (int dx, int dy)
 
int GetWidth () const
 
void SetWidth (int w)
 
int GetHeight () const
 
void SetHeight (int h)
 
void Resize (int w, int h)
 

Protected 成员函数

virtual void Init ()
 
- Protected 成员函数 继承自 HiEasyX::ControlBase
void UpdateRect (RECT rctOld) override
 更新区域消息处理 更多...
 
void MarkNeedRedrawAndRender ()
 标记需要重绘和渲染 更多...
 
void MarkNeedClearRect (RECT rct)
 标记需要清空矩形区域 更多...
 
virtual void DrawChild ()
 绘制子控件 更多...
 
virtual ExMessage & TransformMessage (ExMessage &msg)
 转换消息 更多...
 
virtual void CallUserMsgProcFunc (int msgid, ExMessage msg)
 分发消息到用户函数 更多...
 
virtual void ChildRectChanged (ControlBase *pChild)
 子控件区域变更 更多...
 

Protected 属性

bool m_bEnableAnimation = true
 是否启用动画效果 更多...
 
int m_nLightPos = 0
 光源位置 更多...
 
clock_t m_tClock = 0
 保留上一次动画的绘制时间 更多...
 
float m_fSpeedRatio = 0.4f
 动画速度(每秒经过总长度的多少) 更多...
 
float m_fLenRatio = 0.8f
 动画光亮效果长度占比 更多...
 
float m_fBarColorLightness = 0.35f
 进度条颜色亮度 更多...
 
float m_fBarLightLightness = 0.41f
 进度条光源亮度 更多...
 
COLORREF m_cBar
 进度条颜色(不用于亮度采样) 更多...
 
float m_fH = 0
 色相信息 更多...
 
float m_fS = 0
 饱和度信息 更多...
 
int m_nPos = 0
 进度条进度 更多...
 
int m_nLen = 100
 进度总长度 更多...
 
- Protected 属性 继承自 HiEasyX::ControlBase
bool m_bEnabled = true
 是否可用 更多...
 
bool m_bVisible = true
 是否可见 更多...
 
bool m_bAutoRedrawWhenReceiveMsg = true
 当默认消息处理函数接受到消息时,是否自动标识重绘和渲染 更多...
 
bool m_bRedraw = true
 标识需要重绘 更多...
 
bool m_bRender = true
 标识需要渲染 更多...
 
bool m_bClear = false
 标识需要清空某区域 更多...
 
RECT m_rctClear = { 0 }
 记录需要清空的区域 更多...
 
bool m_bAlwaysRedrawAndRender = false
 总是重绘和渲染(占用更高) 更多...
 
std::wstring m_wstrText
 控件文本 更多...
 
Canvas m_canvas
 画布 更多...
 
BYTE m_alpha = 255
 透明度 更多...
 
bool m_bUseCanvasAlpha = false
 是否使用画布自身的透明度信息 更多...
 
bool m_isAlphaCalculated = false
 画布是否已经计算透明混合颜色 更多...
 
COLORREF m_cBorder = MODERN_BORDER_GRAY
 边框颜色 更多...
 
COLORREF m_cBackground = CLASSICGRAY
 背景色 更多...
 
COLORREF m_cText = BLACK
 文本颜色 更多...
 
bool m_bEnableBorder = true
 是否绘制边框 更多...
 
int m_nBorderThickness = 1
 边框粗细 更多...
 
bool m_bCompleteFirstSetRect = false
 是否已经完成第一次设置区域 更多...
 
ControlBasem_pParent = nullptr
 父控件 更多...
 
std::list< ControlBase * > m_listChild
 子控件 更多...
 
bool m_bAutoSizeForChild = false
 为子控件自动改变大小以容纳控件 更多...
 
MESSAGE_PROC_FUNC m_funcMessageProc = nullptr
 消息处理函数 更多...
 
MESSAGE_PROC_FUNC_CLASS m_funcMessageProc_Class = nullptr
 若绑定的消息处理函数是静态类函数,则记录其地址 更多...
 
void * m_pCalledClass = nullptr
 若绑定的消息处理函数是静态类函数,则记录该类指针 更多...
 
bool m_bHovered = false
 鼠标是否悬停 更多...
 
bool m_bPressed = false
 鼠标是否按下 更多...
 
bool m_bFocused = false
 是否拥有焦点 更多...
 
- Protected 属性 继承自 HiEasyX::Container
RECT m_rct = { 0 }
 容器区域 更多...
 

详细描述

进度条控件

在文件 ProgressCtrl.h18 行定义.

构造及析构函数说明

◆ ProgressCtrl() [1/2]

HiEasyX::ProgressCtrl::ProgressCtrl ( )

在文件 ProgressCtrl.cpp10 行定义.

11  {
12  Init();
13  SetBarColor(GREEN);
14  }

◆ ProgressCtrl() [2/2]

HiEasyX::ProgressCtrl::ProgressCtrl ( int  x,
int  y,
int  w,
int  h,
int  len 
)

在文件 ProgressCtrl.cpp16 行定义.

17  {
18  Init();
19  m_nLen = len;
20  SetRect(x, y, w, h);
21  SetBarColor(GREEN);
22  }

成员函数说明

◆ Draw()

void HiEasyX::ProgressCtrl::Draw ( bool  draw_child = true)
overridevirtual

绘制控件

参数
[in]draw_child是否绘制子控件

重载 HiEasyX::ControlBase .

在文件 ProgressCtrl.cpp69 行定义.

70  {
71  if (m_bRedraw)
72  {
73  ControlBase::Draw(false);
74 
75  // 绘制结束位置
76  int nEnd = (int)((m_nPos / (float)m_nLen) * (GetWidth() - 2));
77 
79  { 1,1,nEnd,GetHeight() - 2 },
80  true, m_cBar
81  );
82 
83  // 绘制动画效果
85  {
86  // 动画进度
87  if (m_tClock == 0) m_tClock = clock();
88  float fProcess = (
89  ((clock() - m_tClock) / (float)CLOCKS_PER_SEC) // 经过时长
90  / (1 / m_fSpeedRatio) // 总时长
91  );
92  if (fProcess >= 1)
93  {
94  fProcess = 0;
95  m_tClock = clock();
96  }
97 
98  int nAnimationLen = (int)(m_nPos / (float)m_nLen * GetWidth() * m_fLenRatio); // 动画效果长度
99  int nAnimationLenHalf = nAnimationLen / 2; // 动画效果半长
100  int draw_pos = (int)((nEnd + nAnimationLen) * fProcess) - nAnimationLenHalf; // 光源绘制 x 坐标
101  for (int i = -nAnimationLenHalf; i < nAnimationLenHalf; i++)
102  {
103  int pos = i + draw_pos; // 当前绘制 x 坐标
104 
105  // 当前绘制亮度
106  float l = (m_fBarColorLightness - m_fBarLightLightness) * (abs(i) / (float)nAnimationLenHalf) + m_fBarLightLightness;
107  if (pos >= 1 && pos <= nEnd)
108  {
109  m_canvas.Line(
110  pos, 1, pos, GetHeight() - 2,
111  true, HSLtoRGB(m_fH, m_fS, l)
112  );
113  }
114  }
115  }
116  }
117 
118  if (draw_child)
119  {
120  DrawChild();
121  }
122  }

◆ EnableAnimation()

void HiEasyX::ProgressCtrl::EnableAnimation ( bool  enable)
virtual

设置是否启用动画

参数
[in]enable是否启用

在文件 ProgressCtrl.cpp59 行定义.

60  {
61  m_bEnableAnimation = enable;
62 
63  // 启用动画后,总是重绘
65 
67  }

◆ GetAnimationState()

virtual bool HiEasyX::ProgressCtrl::GetAnimationState ( ) const
inlinevirtual

获取动画启用状态

在文件 ProgressCtrl.h90 行定义.

90 { return m_bEnableAnimation; }

◆ GetBarColor()

virtual COLORREF HiEasyX::ProgressCtrl::GetBarColor ( ) const
inlinevirtual

获取进度条颜色

在文件 ProgressCtrl.h79 行定义.

79 { return m_cBar; }

◆ GetContentLength()

virtual int HiEasyX::ProgressCtrl::GetContentLength ( ) const
inlinevirtual

获取内容长度

在文件 ProgressCtrl.h52 行定义.

52 { return m_nLen; }

◆ GetProcess()

virtual int HiEasyX::ProgressCtrl::GetProcess ( ) const
inlinevirtual

获取进度(内容长度即为总进度)

在文件 ProgressCtrl.h63 行定义.

63 { return m_nPos; }

◆ Init()

void HiEasyX::ProgressCtrl::Init ( )
protectedvirtual

在文件 ProgressCtrl.cpp5 行定义.

6  {
8  }

◆ SetBarColor()

void HiEasyX::ProgressCtrl::SetBarColor ( COLORREF  cBar)
virtual

设置进度条颜色

参数
[in]cBar进度条颜色

在文件 ProgressCtrl.cpp48 行定义.

49  {
50  float h, s, l;
51  RGBtoHSL(cBar, &h, &s, &l);
52  m_fH = h;
53  m_fS = s;
54  m_cBar = HSLtoRGB(h, s, m_fBarColorLightness);
55 
57  }

◆ SetContentLength()

void HiEasyX::ProgressCtrl::SetContentLength ( int  len)
virtual

设置内容长度

参数
[in]len内容长度

在文件 ProgressCtrl.cpp24 行定义.

25  {
26  m_nLen = len;
27 
29  }

◆ SetProcess()

void HiEasyX::ProgressCtrl::SetProcess ( int  pos)
virtual

设置进度(内容长度即为总进度)

参数
[in]pos进度

在文件 ProgressCtrl.cpp31 行定义.

32  {
33  m_nPos = pos;
34 
36  }

◆ Step()

void HiEasyX::ProgressCtrl::Step ( )
virtual

进度加一

在文件 ProgressCtrl.cpp38 行定义.

39  {
40  if (m_nPos + 1 <= m_nLen)
41  {
42  m_nPos++;
43  }
44 
46  }

类成员变量说明

◆ m_bEnableAnimation

bool HiEasyX::ProgressCtrl::m_bEnableAnimation = true
protected

是否启用动画效果

在文件 ProgressCtrl.h22 行定义.

◆ m_cBar

COLORREF HiEasyX::ProgressCtrl::m_cBar
protected

进度条颜色(不用于亮度采样)

在文件 ProgressCtrl.h33 行定义.

◆ m_fBarColorLightness

float HiEasyX::ProgressCtrl::m_fBarColorLightness = 0.35f
protected

进度条颜色亮度

在文件 ProgressCtrl.h30 行定义.

◆ m_fBarLightLightness

float HiEasyX::ProgressCtrl::m_fBarLightLightness = 0.41f
protected

进度条光源亮度

在文件 ProgressCtrl.h31 行定义.

◆ m_fH

float HiEasyX::ProgressCtrl::m_fH = 0
protected

色相信息

在文件 ProgressCtrl.h35 行定义.

◆ m_fLenRatio

float HiEasyX::ProgressCtrl::m_fLenRatio = 0.8f
protected

动画光亮效果长度占比

在文件 ProgressCtrl.h28 行定义.

◆ m_fS

float HiEasyX::ProgressCtrl::m_fS = 0
protected

饱和度信息

在文件 ProgressCtrl.h36 行定义.

◆ m_fSpeedRatio

float HiEasyX::ProgressCtrl::m_fSpeedRatio = 0.4f
protected

动画速度(每秒经过总长度的多少)

在文件 ProgressCtrl.h26 行定义.

◆ m_nLen

int HiEasyX::ProgressCtrl::m_nLen = 100
protected

进度总长度

在文件 ProgressCtrl.h39 行定义.

◆ m_nLightPos

int HiEasyX::ProgressCtrl::m_nLightPos = 0
protected

光源位置

在文件 ProgressCtrl.h24 行定义.

◆ m_nPos

int HiEasyX::ProgressCtrl::m_nPos = 0
protected

进度条进度

在文件 ProgressCtrl.h38 行定义.

◆ m_tClock

clock_t HiEasyX::ProgressCtrl::m_tClock = 0
protected

保留上一次动画的绘制时间

在文件 ProgressCtrl.h25 行定义.


该类的文档由以下文件生成:
HiEasyX::ProgressCtrl::m_nPos
int m_nPos
进度条进度
Definition: ProgressCtrl.h:38
HiEasyX::ControlBase::MarkNeedRedrawAndRender
void MarkNeedRedrawAndRender()
标记需要重绘和渲染
Definition: ControlBase.cpp:62
HiEasyX::Canvas::Line
void Line(int x1, int y1, int x2, int y2, bool isSetColor=false, COLORREF c=0)
Definition: HiCanvas.cpp:764
HiEasyX::ProgressCtrl::m_fBarColorLightness
float m_fBarColorLightness
进度条颜色亮度
Definition: ProgressCtrl.h:30
HiEasyX::ControlBase::DrawChild
virtual void DrawChild()
绘制子控件
Definition: ControlBase.cpp:246
HiEasyX::ControlBase::m_bAlwaysRedrawAndRender
bool m_bAlwaysRedrawAndRender
总是重绘和渲染(占用更高)
Definition: ControlBase.h:65
HiEasyX::Container::GetWidth
int GetWidth() const
Definition: HiContainer.h:65
HiEasyX::ProgressCtrl::SetBarColor
virtual void SetBarColor(COLORREF cBar)
设置进度条颜色
Definition: ProgressCtrl.cpp:48
HiEasyX::ProgressCtrl::m_nLen
int m_nLen
进度总长度
Definition: ProgressCtrl.h:39
HiEasyX::Container::GetHeight
int GetHeight() const
Definition: HiContainer.h:69
HiEasyX::ProgressCtrl::m_fBarLightLightness
float m_fBarLightLightness
进度条光源亮度
Definition: ProgressCtrl.h:31
HiEasyX::ProgressCtrl::m_fS
float m_fS
饱和度信息
Definition: ProgressCtrl.h:36
HiEasyX::ControlBase::m_canvas
Canvas m_canvas
画布
Definition: ControlBase.h:69
HiEasyX::ProgressCtrl::Init
virtual void Init()
Definition: ProgressCtrl.cpp:5
HiEasyX::ProgressCtrl::m_fH
float m_fH
色相信息
Definition: ProgressCtrl.h:35
HiEasyX::ControlBase::Draw
virtual void Draw(bool draw_child=true)
绘制控件
Definition: ControlBase.cpp:224
HiEasyX::Canvas::SolidRectangle
void SolidRectangle(int left, int top, int right, int bottom, bool isSetColor=false, COLORREF c=0)
Definition: HiCanvas.cpp:814
HiEasyX::Container::SetRect
void SetRect(int x, int y, int w, int h)
设置位置和宽高
Definition: HiContainer.cpp:26
HiEasyX::ProgressCtrl::m_bEnableAnimation
bool m_bEnableAnimation
是否启用动画效果
Definition: ProgressCtrl.h:22
HiEasyX::ProgressCtrl::m_fSpeedRatio
float m_fSpeedRatio
动画速度(每秒经过总长度的多少)
Definition: ProgressCtrl.h:26
HiEasyX::ProgressCtrl::m_cBar
COLORREF m_cBar
进度条颜色(不用于亮度采样)
Definition: ProgressCtrl.h:33
HiEasyX::ProgressCtrl::m_fLenRatio
float m_fLenRatio
动画光亮效果长度占比
Definition: ProgressCtrl.h:28
HiEasyX::ProgressCtrl::m_tClock
clock_t m_tClock
保留上一次动画的绘制时间
Definition: ProgressCtrl.h:25
HiEasyX::ControlBase::m_bRedraw
bool m_bRedraw
标识需要重绘
Definition: ControlBase.h:61