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

滚动条控件 更多...

#include <ScrollBar.h>

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

struct  ScrollBarInfo
 滚动条信息 更多...
 

Public 成员函数

 ScrollBar ()
 
 ScrollBar (int x, int y, int w, int h, int len, int pos, bool bHorizontal=false)
 
int GetButtonHeight () const
 
void SetButtonHeight (int h)
 设置按钮高度(竖直放置时生效) 更多...
 
int GetButtonWidth () const
 
void SetButtonWidth (int w)
 设置按钮宽度(水平放置时生效) 更多...
 
bool IsDragging () const
 判断是否正在拖动 更多...
 
int GetSliderLength () const
 获取滑块像素长度 更多...
 
int GetSliderContentPos () const
 获取滑块内容位置 更多...
 
void SetSliderContentPos (float pos)
 设置滑块内容位置 更多...
 
void MoveSlider (float d)
 相对移动滑块的内容位置 更多...
 
int GetContentLength () const
 获取滚动条内容长度 更多...
 
void SetContentLength (int len)
 设置滚动条内容长度 更多...
 
int GetViewLength () const
 
void SetViewLength (int len)
 设置视野内容长度 更多...
 
int GetSliderSpeed () const
 
void SetSliderSpeed (int speed)
 设置按下按钮时滑块的运行速度 更多...
 
bool IsHorizontal () const
 
void EnableHorizontal (bool enable)
 启用水平放置 更多...
 
bool IsSliderPosChanged ()
 判断滑块位置是否改变 更多...
 
RECT GetOnWheelRect () const
 获取响应滚轮消息的区域(未自定义时返回空区域) 更多...
 
void SetOnWheelRect (RECT rct)
 设置响应滚轮消息的区域(客户区坐标) 更多...
 
void UpdateRect (RECT rctOld) override
 更新区域消息处理 更多...
 
void UpdateMessage (ExMessage msg) override
 更新消息 更多...
 
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 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 ()
 初始化 更多...
 
virtual void OnNormalButtonMsg ()
 响应普通按钮消息(Up 和 Down) 更多...
 
virtual void UpdateSliderRect ()
 更新滑块位置区域 更多...
 
void UpdatePosRatio ()
 更新位置比例 更多...
 
void UpdateViewRatio ()
 更新视野比例 更多...
 
void UpdateScrollBarInfo ()
 更新滚动条信息 更多...
 
- Protected 成员函数 继承自 HiEasyX::ControlBase
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 成员函数

static void OnSpecialButtonMsg (void *pThis, ControlBase *pCtrl, int msgid, ExMessage msg)
 响应特殊按钮消息(Top 和 Bottom) 更多...
 

Protected 属性

int m_nBtnHeight = 20
 按钮高度(竖直放置时有效) 更多...
 
int m_nBtnWidth = 20
 按钮宽度(水平放置时有效) 更多...
 
bool m_bHorizontal = false
 是否水平放置 更多...
 
int m_nDrawInterval = 6
 绘制间隙 更多...
 
Button m_btnTop
 
Button m_btnUp
 
Button m_btnDown
 
Button m_btnBottom
 
Button m_btnDrag
 
MouseDrag m_MouseDrag
 
bool m_bDragging = false
 是否正在拖动 更多...
 
int m_nSliderSpeed = 20
 按住按钮时滑块每秒运行的内容长度 更多...
 
clock_t m_tPressed = 0
 按钮按住计时 更多...
 
float m_fPos = 0
 滑块内容位置 更多...
 
int m_nLen = 0
 内容总长度 更多...
 
float m_fPosRatio = 0
 滑块内容位置比例 更多...
 
ScrollBarInfo m_info = {}
 滚动条信息 更多...
 
int m_nViewLen = 10
 视野内容长度 更多...
 
float m_fViewRatio = 1
 视野范围占总长度的比 更多...
 
bool m_bSliderPosChanged = false
 标记滑块位置改变 更多...
 
RECT m_rctOnWheel = { 0 }
 响应滚轮消息的区域(客户区坐标) 更多...
 
bool m_bSetOnWheelRct = false
 是否设置了滚轮消息的响应区域 更多...
 
- 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 }
 容器区域 更多...
 

详细描述

滚动条控件

在文件 ScrollBar.h20 行定义.

构造及析构函数说明

◆ ScrollBar() [1/2]

HiEasyX::ScrollBar::ScrollBar ( )

在文件 ScrollBar.cpp141 行定义.

142  {
143  Init();
144  }

◆ ScrollBar() [2/2]

HiEasyX::ScrollBar::ScrollBar ( int  x,
int  y,
int  w,
int  h,
int  len,
int  pos,
bool  bHorizontal = false 
)

在文件 ScrollBar.cpp146 行定义.

147  {
148  m_bHorizontal = bHorizontal;
149  SetRect(x, y, w, h);
150  SetContentLength(len);
151  SetSliderContentPos((float)pos);
152  Init();
153  }

成员函数说明

◆ Draw()

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

绘制控件

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

重载 HiEasyX::ControlBase .

在文件 ScrollBar.cpp272 行定义.

273  {
274  // 按钮消息
275  // 由于按下消息不会一直发送,所以此消息只能在每次重绘时处理
277 
278  if (m_bRedraw)
279  {
281 
282  Canvas& canvasTop = m_btnTop.GetCanvas();
283  Canvas& canvasUp = m_btnUp.GetCanvas();
284  Canvas& canvasDown = m_btnDown.GetCanvas();
285  Canvas& canvasBottom = m_btnBottom.GetCanvas();
286 
287  COLORREF cLine = DARKGRAY;
288 
289  if (m_bHorizontal)
290  {
291  int bottom_y = GetHeight() - m_nDrawInterval;
292  int middle_y = GetHeight() / 2;
293  int right_x = m_nBtnWidth - m_nDrawInterval;
294 
295  // 绘制朝左箭头
296  auto pDrawLeft = [this, cLine, bottom_y, middle_y, right_x](Canvas& canvas) {
297  canvas.SetLineColor(cLine);
298  canvas.MoveTo(right_x, m_nDrawInterval);
299  canvas.LineTo(m_nDrawInterval, middle_y);
300  canvas.LineTo(right_x, bottom_y);
301  };
302 
303  // 绘制朝右箭头
304  auto pDrawRight = [this, cLine, bottom_y, middle_y, right_x](Canvas& canvas) {
305  canvas.SetLineColor(cLine);
306  canvas.MoveTo(m_nDrawInterval, m_nDrawInterval);
307  canvas.LineTo(right_x, middle_y);
308  canvas.LineTo(m_nDrawInterval, bottom_y);
309  };
310 
311  pDrawLeft(canvasTop);
312  pDrawLeft(canvasUp);
313  pDrawRight(canvasDown);
314  pDrawRight(canvasBottom);
315 
316  canvasTop.Line(m_nDrawInterval, m_nDrawInterval, m_nDrawInterval, bottom_y);
317  canvasBottom.Line(right_x, m_nDrawInterval, right_x, bottom_y);
318  }
319  else
320  {
321  int bottom_y = m_nBtnHeight - m_nDrawInterval;
322  int middle_x = GetWidth() / 2;
323  int right_x = GetWidth() - m_nDrawInterval;
324 
325  // 绘制朝上箭头
326  auto pDrawUp = [this, cLine, bottom_y, middle_x, right_x](Canvas& canvas) {
327  canvas.SetLineColor(cLine);
328  canvas.MoveTo(m_nDrawInterval, bottom_y);
329  canvas.LineTo(middle_x, m_nDrawInterval);
330  canvas.LineTo(right_x, bottom_y);
331  };
332 
333  // 绘制朝下箭头
334  auto pDrawDown = [this, cLine, bottom_y, middle_x, right_x](Canvas& canvas) {
335  canvas.SetLineColor(cLine);
336  canvas.MoveTo(m_nDrawInterval, m_nDrawInterval);
337  canvas.LineTo(middle_x, bottom_y);
338  canvas.LineTo(right_x, m_nDrawInterval);
339  };
340 
341  pDrawUp(canvasTop);
342  pDrawUp(canvasUp);
343  pDrawDown(canvasDown);
344  pDrawDown(canvasBottom);
345 
346  canvasTop.Line(m_nDrawInterval, m_nDrawInterval, right_x, m_nDrawInterval);
347  canvasBottom.Line(m_nDrawInterval, bottom_y, right_x, bottom_y);
348  }
349  }
350 
351  if (draw_child)
352  {
353  DrawChild();
354  }
355  }

◆ EnableHorizontal()

void HiEasyX::ScrollBar::EnableHorizontal ( bool  enable)

启用水平放置

参数
[in]enable是否启用

在文件 ScrollBar.cpp370 行定义.

371  {
372  m_bHorizontal = enable;
373 
375  }

◆ GetButtonHeight()

int HiEasyX::ScrollBar::GetButtonHeight ( ) const
inline

在文件 ScrollBar.h114 行定义.

114 { return m_nBtnHeight; }

◆ GetButtonWidth()

int HiEasyX::ScrollBar::GetButtonWidth ( ) const
inline

在文件 ScrollBar.h122 行定义.

122 { return m_nBtnWidth; }

◆ GetContentLength()

int HiEasyX::ScrollBar::GetContentLength ( ) const
inline

获取滚动条内容长度

在文件 ScrollBar.h160 行定义.

160 { return m_nLen; }

◆ GetOnWheelRect()

RECT HiEasyX::ScrollBar::GetOnWheelRect ( ) const
inline

获取响应滚轮消息的区域(未自定义时返回空区域)

在文件 ScrollBar.h200 行定义.

200 { return m_rctOnWheel; }

◆ GetSliderContentPos()

int HiEasyX::ScrollBar::GetSliderContentPos ( ) const
inline

获取滑块内容位置

在文件 ScrollBar.h143 行定义.

143 { return (int)m_fPos; }

◆ GetSliderLength()

int HiEasyX::ScrollBar::GetSliderLength ( ) const
inline

获取滑块像素长度

在文件 ScrollBar.h138 行定义.

138 { return m_info.slider_len; }

◆ GetSliderSpeed()

int HiEasyX::ScrollBar::GetSliderSpeed ( ) const
inline

在文件 ScrollBar.h176 行定义.

176 { return m_nSliderSpeed; }

◆ GetViewLength()

int HiEasyX::ScrollBar::GetViewLength ( ) const
inline

在文件 ScrollBar.h168 行定义.

168 { return m_nViewLen; }

◆ Init()

void HiEasyX::ScrollBar::Init ( )
protectedvirtual

初始化

在文件 ScrollBar.cpp54 行定义.

◆ IsDragging()

bool HiEasyX::ScrollBar::IsDragging ( ) const
inline

判断是否正在拖动

在文件 ScrollBar.h133 行定义.

133 { return m_bDragging; }

◆ IsHorizontal()

bool HiEasyX::ScrollBar::IsHorizontal ( ) const
inline

在文件 ScrollBar.h184 行定义.

184 { return m_bHorizontal; }

◆ IsSliderPosChanged()

bool HiEasyX::ScrollBar::IsSliderPosChanged ( )

判断滑块位置是否改变

在文件 ScrollBar.cpp357 行定义.

358  {
359  bool r = m_bSliderPosChanged;
360  m_bSliderPosChanged = false;
361  return m_bSliderPosChanged;
362  }

◆ MoveSlider()

void HiEasyX::ScrollBar::MoveSlider ( float  d)

相对移动滑块的内容位置

参数
[in]d滑块位置

在文件 ScrollBar.cpp173 行定义.

174  {
176  }

◆ OnNormalButtonMsg()

void HiEasyX::ScrollBar::OnNormalButtonMsg ( )
protectedvirtual

响应普通按钮消息(Up 和 Down)

在文件 ScrollBar.cpp24 行定义.

25  {
26  clock_t tNow = clock();
27  float move_len = (float)(tNow - m_tPressed) / CLOCKS_PER_SEC * m_nSliderSpeed;
28  if (m_btnUp.IsPressed())
29  {
30  if (m_tPressed != 0)
31  {
32  MoveSlider(-move_len);
33  }
34  m_tPressed = tNow;
35 
37  }
38  else if (m_btnDown.IsPressed())
39  {
40  if (m_tPressed != 0)
41  {
42  MoveSlider(move_len);
43  }
44  m_tPressed = tNow;
45 
47  }
48  else
49  {
50  m_tPressed = 0;
51  }
52  }

◆ OnSpecialButtonMsg()

void HiEasyX::ScrollBar::OnSpecialButtonMsg ( void *  pThis,
ControlBase pCtrl,
int  msgid,
ExMessage  msg 
)
staticprotected

响应特殊按钮消息(Top 和 Bottom)

参数
[in]pThis类指针
[in]pCtrl控件
[in]msgid消息 ID
[in]msg消息内容

在文件 ScrollBar.cpp5 行定义.

6  {
7  ScrollBar* _this = (ScrollBar*)pThis;
8 
9  switch (msgid)
10  {
11  case CM_CLICK:
12  if (pCtrl == &_this->m_btnTop)
13  {
14  _this->SetSliderContentPos(0);
15  }
16  else if (pCtrl == &_this->m_btnBottom)
17  {
18  _this->SetSliderContentPos((float)_this->GetContentLength());
19  }
20  break;
21  }
22  }

◆ SetButtonHeight()

void HiEasyX::ScrollBar::SetButtonHeight ( int  h)

设置按钮高度(竖直放置时生效)

参数
[in]h高度

在文件 ScrollBar.cpp127 行定义.

128  {
129  m_nBtnHeight = h;
130 
132  }

◆ SetButtonWidth()

void HiEasyX::ScrollBar::SetButtonWidth ( int  w)

设置按钮宽度(水平放置时生效)

参数
[in]w宽度

在文件 ScrollBar.cpp134 行定义.

135  {
136  m_nBtnWidth = w;
137 
139  }

◆ SetContentLength()

void HiEasyX::ScrollBar::SetContentLength ( int  len)

设置滚动条内容长度

参数
[in]len内容长度

在文件 ScrollBar.cpp178 行定义.

179  {
180  m_nLen = len;
181  UpdatePosRatio();
182  UpdateViewRatio();
184  }

◆ SetOnWheelRect()

void HiEasyX::ScrollBar::SetOnWheelRect ( RECT  rct)

设置响应滚轮消息的区域(客户区坐标)

参数
[in]rct消息响应区域

在文件 ScrollBar.cpp364 行定义.

365  {
366  m_rctOnWheel = rct;
367  m_bSetOnWheelRct = true;
368  }

◆ SetSliderContentPos()

void HiEasyX::ScrollBar::SetSliderContentPos ( float  pos)

设置滑块内容位置

参数
[in]pos滑块位置

在文件 ScrollBar.cpp155 行定义.

156  {
157  if (pos < 0)
158  {
159  m_fPos = 0;
160  }
161  else if (pos > m_nLen)
162  {
163  m_fPos = (float)m_nLen;
164  }
165  else
166  {
167  m_fPos = pos;
168  }
169  UpdatePosRatio();
171  }

◆ SetSliderSpeed()

void HiEasyX::ScrollBar::SetSliderSpeed ( int  speed)

设置按下按钮时滑块的运行速度

参数
[in]speed运行速度(每秒经过的内容长度)

在文件 ScrollBar.cpp193 行定义.

194  {
195  m_nSliderSpeed = speed;
196  }

◆ SetViewLength()

void HiEasyX::ScrollBar::SetViewLength ( int  len)

设置视野内容长度

参数
[in]len视野内容长度

在文件 ScrollBar.cpp186 行定义.

187  {
188  m_nViewLen = len;
189  UpdateViewRatio();
191  }

◆ UpdateMessage()

void HiEasyX::ScrollBar::UpdateMessage ( ExMessage  msg)
overridevirtual

更新消息

参数
[in]msg新消息

重载 HiEasyX::ControlBase .

在文件 ScrollBar.cpp222 行定义.

223  {
224  if (m_bVisible && m_bEnabled)
225  {
227 
228  // 此处响应消息无需转换
229  //TransformMessage(msg);
230 
231  // 检查拖动状态
233  if (m_btnDrag.IsPressed())
234  {
235  m_bDragging = true;
236  }
237  else if (msg.message == WM_LBUTTONUP)
238  {
239  m_bDragging = false;
240  }
241 
242  // 拖动消息
244  {
246  {
248  MoveSlider(drag / (float)m_info.slider_move_len * m_nLen);
249  }
250  }
251 
252  // 滚轮消息响应区域
253  RECT rctWheel = m_bSetOnWheelRct ? m_rctOnWheel : m_rct;
254  bool bWheel = false;
255  if (IsInRect(msg.x, msg.y, rctWheel) || m_bDragging)
256  {
257  if (msg.wheel)
258  {
259  bWheel = true;
260  MoveSlider(-msg.wheel / 120.0f * 3);
261  }
262  }
263 
264  // 拖动或滚轮时需要重绘
265  if (m_bDragging || bWheel)
266  {
268  }
269  }
270  }

◆ UpdatePosRatio()

void HiEasyX::ScrollBar::UpdatePosRatio ( )
protected

更新位置比例

在文件 ScrollBar.cpp82 行定义.

83  {
84  if (m_nLen)
85  {
87  }
88  else
89  {
90  m_fPosRatio = 1;
91  }
92  }

◆ UpdateRect()

void HiEasyX::ScrollBar::UpdateRect ( RECT  rctOld)
overridevirtual

更新区域消息处理

参数
[in]rctOld旧区域

重载 HiEasyX::ControlBase .

在文件 ScrollBar.cpp198 行定义.

199  {
200  ControlBase::UpdateRect(rctOld);
201 
203 
204  if (m_bHorizontal)
205  {
210  }
211  else
212  {
217  }
218 
220  }

◆ UpdateScrollBarInfo()

void HiEasyX::ScrollBar::UpdateScrollBarInfo ( )
protected

更新滚动条信息

在文件 ScrollBar.cpp107 行定义.

108  {
109  if (m_bHorizontal)
110  {
112  m_info.btnH = GetHeight();
114  }
115  else
116  {
117  m_info.btnW = GetWidth();
120  }
121 
122  m_info.slider_free_len -= 2; // 左右各空出 1 像素
125  }

◆ UpdateSliderRect()

void HiEasyX::ScrollBar::UpdateSliderRect ( )
protectedvirtual

更新滑块位置区域

在文件 ScrollBar.cpp68 行定义.

69  {
70  if (m_bHorizontal)
71  {
73  }
74  else
75  {
77  }
78 
80  }

◆ UpdateViewRatio()

void HiEasyX::ScrollBar::UpdateViewRatio ( )
protected

更新视野比例

在文件 ScrollBar.cpp94 行定义.

95  {
96  if (m_nLen)
97  {
98  m_fViewRatio = m_nViewLen / (float)m_nLen;
99  }
100  else
101  {
102  m_fViewRatio = 1;
103  }
105  }

类成员变量说明

◆ m_bDragging

bool HiEasyX::ScrollBar::m_bDragging = false
protected

是否正在拖动

在文件 ScrollBar.h51 行定义.

◆ m_bHorizontal

bool HiEasyX::ScrollBar::m_bHorizontal = false
protected

是否水平放置

在文件 ScrollBar.h40 行定义.

◆ m_bSetOnWheelRct

bool HiEasyX::ScrollBar::m_bSetOnWheelRct = false
protected

是否设置了滚轮消息的响应区域

在文件 ScrollBar.h67 行定义.

◆ m_bSliderPosChanged

bool HiEasyX::ScrollBar::m_bSliderPosChanged = false
protected

标记滑块位置改变

在文件 ScrollBar.h64 行定义.

◆ m_btnBottom

Button HiEasyX::ScrollBar::m_btnBottom
protected

在文件 ScrollBar.h48 行定义.

◆ m_btnDown

Button HiEasyX::ScrollBar::m_btnDown
protected

在文件 ScrollBar.h47 行定义.

◆ m_btnDrag

Button HiEasyX::ScrollBar::m_btnDrag
protected

在文件 ScrollBar.h49 行定义.

◆ m_btnTop

Button HiEasyX::ScrollBar::m_btnTop
protected

在文件 ScrollBar.h45 行定义.

◆ m_btnUp

Button HiEasyX::ScrollBar::m_btnUp
protected

在文件 ScrollBar.h46 行定义.

◆ m_fPos

float HiEasyX::ScrollBar::m_fPos = 0
protected

滑块内容位置

在文件 ScrollBar.h55 行定义.

◆ m_fPosRatio

float HiEasyX::ScrollBar::m_fPosRatio = 0
protected

滑块内容位置比例

在文件 ScrollBar.h57 行定义.

◆ m_fViewRatio

float HiEasyX::ScrollBar::m_fViewRatio = 1
protected

视野范围占总长度的比

在文件 ScrollBar.h62 行定义.

◆ m_info

ScrollBarInfo HiEasyX::ScrollBar::m_info = {}
protected

滚动条信息

在文件 ScrollBar.h59 行定义.

◆ m_MouseDrag

MouseDrag HiEasyX::ScrollBar::m_MouseDrag
protected

在文件 ScrollBar.h50 行定义.

◆ m_nBtnHeight

int HiEasyX::ScrollBar::m_nBtnHeight = 20
protected

按钮高度(竖直放置时有效)

在文件 ScrollBar.h37 行定义.

◆ m_nBtnWidth

int HiEasyX::ScrollBar::m_nBtnWidth = 20
protected

按钮宽度(水平放置时有效)

在文件 ScrollBar.h38 行定义.

◆ m_nDrawInterval

int HiEasyX::ScrollBar::m_nDrawInterval = 6
protected

绘制间隙

在文件 ScrollBar.h42 行定义.

◆ m_nLen

int HiEasyX::ScrollBar::m_nLen = 0
protected

内容总长度

在文件 ScrollBar.h56 行定义.

◆ m_nSliderSpeed

int HiEasyX::ScrollBar::m_nSliderSpeed = 20
protected

按住按钮时滑块每秒运行的内容长度

在文件 ScrollBar.h52 行定义.

◆ m_nViewLen

int HiEasyX::ScrollBar::m_nViewLen = 10
protected

视野内容长度

在文件 ScrollBar.h61 行定义.

◆ m_rctOnWheel

RECT HiEasyX::ScrollBar::m_rctOnWheel = { 0 }
protected

响应滚轮消息的区域(客户区坐标)

在文件 ScrollBar.h66 行定义.

◆ m_tPressed

clock_t HiEasyX::ScrollBar::m_tPressed = 0
protected

按钮按住计时

在文件 ScrollBar.h53 行定义.


该类的文档由以下文件生成:
HiEasyX::ControlBase::MarkNeedRedrawAndRender
void MarkNeedRedrawAndRender()
标记需要重绘和渲染
Definition: ControlBase.cpp:62
HiEasyX::MouseDrag::IsLeftDrag
bool IsLeftDrag()
鼠标左键是否拖动
Definition: HiMouseDrag.cpp:56
HiEasyX::ScrollBar::m_fViewRatio
float m_fViewRatio
视野范围占总长度的比
Definition: ScrollBar.h:62
HiEasyX::ScrollBar::m_btnDown
Button m_btnDown
Definition: ScrollBar.h:47
HiEasyX::ScrollBar::m_bHorizontal
bool m_bHorizontal
是否水平放置
Definition: ScrollBar.h:40
HiEasyX::ControlBase::SetMsgProcFunc
virtual void SetMsgProcFunc(MESSAGE_PROC_FUNC func)
设置消息响应函数
Definition: ControlBase.cpp:340
HiEasyX::ScrollBar::SetSliderContentPos
void SetSliderContentPos(float pos)
设置滑块内容位置
Definition: ScrollBar.cpp:155
HiEasyX::ScrollBar::ScrollBarInfo::btnH
int btnH
普通按钮尺寸
Definition: ScrollBar.h:29
HiEasyX::ControlBase::UpdateRect
void UpdateRect(RECT rctOld) override
更新区域消息处理
Definition: ControlBase.cpp:36
HiEasyX::ControlBase::m_bVisible
bool m_bVisible
是否可见
Definition: ControlBase.h:57
HiEasyX::ScrollBar::m_fPosRatio
float m_fPosRatio
滑块内容位置比例
Definition: ScrollBar.h:57
HiEasyX::ScrollBar::UpdateScrollBarInfo
void UpdateScrollBarInfo()
更新滚动条信息
Definition: ScrollBar.cpp:107
HiEasyX::ControlBase::DrawChild
virtual void DrawChild()
绘制子控件
Definition: ControlBase.cpp:246
HiEasyX::ScrollBar::m_bDragging
bool m_bDragging
是否正在拖动
Definition: ScrollBar.h:51
HiEasyX::ScrollBar::m_bSetOnWheelRct
bool m_bSetOnWheelRct
是否设置了滚轮消息的响应区域
Definition: ScrollBar.h:67
HiEasyX::ScrollBar::m_nDrawInterval
int m_nDrawInterval
绘制间隙
Definition: ScrollBar.h:42
HiEasyX::ScrollBar::m_MouseDrag
MouseDrag m_MouseDrag
Definition: ScrollBar.h:50
HiEasyX::ScrollBar::UpdateViewRatio
void UpdateViewRatio()
更新视野比例
Definition: ScrollBar.cpp:94
HiEasyX::Container::GetWidth
int GetWidth() const
Definition: HiContainer.h:65
HiEasyX::ScrollBar::m_nViewLen
int m_nViewLen
视野内容长度
Definition: ScrollBar.h:61
HiEasyX::ScrollBar::m_bSliderPosChanged
bool m_bSliderPosChanged
标记滑块位置改变
Definition: ScrollBar.h:64
HiEasyX::ScrollBar::OnNormalButtonMsg
virtual void OnNormalButtonMsg()
响应普通按钮消息(Up 和 Down)
Definition: ScrollBar.cpp:24
HiEasyX::MouseDrag::GetDragY
int GetDragY()
获取拖动的 y 坐标偏移量
Definition: HiMouseDrag.cpp:82
HiEasyX::ScrollBar::ScrollBarInfo::btnW
int btnW
Definition: ScrollBar.h:29
HiEasyX::Container::GetHeight
int GetHeight() const
Definition: HiContainer.h:69
HiEasyX::MouseDrag::UpdateMessage
void UpdateMessage(ExMessage m)
更新鼠标消息
Definition: HiMouseDrag.cpp:47
HiEasyX::ScrollBar::m_nLen
int m_nLen
内容总长度
Definition: ScrollBar.h:56
HiEasyX::ControlBase::GetCanvas
virtual Canvas & GetCanvas()
Definition: ControlBase.h:195
HiEasyX::ScrollBar::UpdateSliderRect
virtual void UpdateSliderRect()
更新滑块位置区域
Definition: ScrollBar.cpp:68
HiEasyX::ScrollBar::m_info
ScrollBarInfo m_info
滚动条信息
Definition: ScrollBar.h:59
HiEasyX::ScrollBar::MoveSlider
void MoveSlider(float d)
相对移动滑块的内容位置
Definition: ScrollBar.cpp:173
HiEasyX::ScrollBar::ScrollBarInfo::slider_move_len
int slider_move_len
滑块顶点可以移动的像素长度
Definition: ScrollBar.h:31
HiEasyX::ScrollBar::m_nBtnHeight
int m_nBtnHeight
按钮高度(竖直放置时有效)
Definition: ScrollBar.h:37
HiEasyX::ControlBase::Draw
virtual void Draw(bool draw_child=true)
绘制控件
Definition: ControlBase.cpp:224
HiEasyX::ControlBase::m_bEnabled
bool m_bEnabled
是否可用
Definition: ControlBase.h:56
HiEasyX::ScrollBar::m_fPos
float m_fPos
滑块内容位置
Definition: ScrollBar.h:55
HiEasyX::ScrollBar::m_nSliderSpeed
int m_nSliderSpeed
按住按钮时滑块每秒运行的内容长度
Definition: ScrollBar.h:52
HiEasyX::ScrollBar::OnSpecialButtonMsg
static void OnSpecialButtonMsg(void *pThis, ControlBase *pCtrl, int msgid, ExMessage msg)
响应特殊按钮消息(Top 和 Bottom)
Definition: ScrollBar.cpp:5
HiEasyX::Container::m_rct
RECT m_rct
容器区域
Definition: HiContainer.h:20
HiEasyX::MouseDrag::GetDragX
int GetDragX()
获取拖动的 x 坐标偏移量
Definition: HiMouseDrag.cpp:77
HiEasyX::ScrollBar::m_btnUp
Button m_btnUp
Definition: ScrollBar.h:46
HiEasyX::Container::SetRect
void SetRect(int x, int y, int w, int h)
设置位置和宽高
Definition: HiContainer.cpp:26
HiEasyX::ControlBase::UpdateMessage
virtual void UpdateMessage(ExMessage msg)
更新消息
Definition: ControlBase.cpp:391
HiEasyX::ScrollBar::m_nBtnWidth
int m_nBtnWidth
按钮宽度(水平放置时有效)
Definition: ScrollBar.h:38
HiEasyX::CM_CLICK
单击
Definition: ControlBase.h:27
HiEasyX::ScrollBar::Init
virtual void Init()
初始化
Definition: ScrollBar.cpp:54
HiEasyX::ScrollBar::m_rctOnWheel
RECT m_rctOnWheel
响应滚轮消息的区域(客户区坐标)
Definition: ScrollBar.h:66
IsInRect
bool IsInRect(int x, int y, RECT rct)
点是否位于矩形内
Definition: HiFunc.cpp:93
HiEasyX::ScrollBar::m_btnBottom
Button m_btnBottom
Definition: ScrollBar.h:48
HiEasyX::ScrollBar::UpdatePosRatio
void UpdatePosRatio()
更新位置比例
Definition: ScrollBar.cpp:82
HiEasyX::ScrollBar::ScrollBarInfo::slider_free_len
int slider_free_len
滑块可以占据的像素长度
Definition: ScrollBar.h:30
HiEasyX::ControlBase::AddChild
virtual void AddChild(ControlBase *p, int offset_x=0, int offset_y=0)
Definition: ControlBase.cpp:118
HiEasyX::ControlBase::IsPressed
virtual bool IsPressed() const
判断是否按下
Definition: ControlBase.h:266
HiEasyX::ScrollBar::m_tPressed
clock_t m_tPressed
按钮按住计时
Definition: ScrollBar.h:53
HiEasyX::ScrollBar::m_btnTop
Button m_btnTop
Definition: ScrollBar.h:45
HiEasyX::ScrollBar::m_btnDrag
Button m_btnDrag
Definition: ScrollBar.h:49
HiEasyX::ScrollBar::ScrollBar
ScrollBar()
Definition: ScrollBar.cpp:141
HiEasyX::ControlBase::m_bRedraw
bool m_bRedraw
标识需要重绘
Definition: ControlBase.h:61
HiEasyX::ScrollBar::SetContentLength
void SetContentLength(int len)
设置滚动条内容长度
Definition: ScrollBar.cpp:178
HiEasyX::ScrollBar::ScrollBarInfo::slider_len
int slider_len
滑块像素长度
Definition: ScrollBar.h:32