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

控件基础 更多...

#include <ControlBase.h>

类 HiEasyX::ControlBase 继承关系图:
HiEasyX::Container HiEasyX::Button HiEasyX::Page HiEasyX::ProgressCtrl HiEasyX::ScrollBar HiEasyX::Static

Public 成员函数

 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 Draw (bool draw_child=true)
 绘制控件 更多...
 
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 成员函数

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_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 }
 容器区域 更多...
 

详细描述

控件基础

在文件 ControlBase.h52 行定义.

构造及析构函数说明

◆ ControlBase() [1/3]

HiEasyX::ControlBase::ControlBase ( )

在文件 ControlBase.cpp14 行定义.

15  {
16  Init();
17  }

◆ ControlBase() [2/3]

HiEasyX::ControlBase::ControlBase ( std::wstring  wstrText)

在文件 ControlBase.cpp19 行定义.

20  {
21  Init();
22  SetText(wstrText);
23  }

◆ ControlBase() [3/3]

HiEasyX::ControlBase::ControlBase ( int  x,
int  y,
int  w = 0,
int  h = 0,
std::wstring  wstrText = L"" 
)

在文件 ControlBase.cpp25 行定义.

26  {
27  Init();
28  SetRect(x, y, w, h);
29  SetText(wstrText);
30  }

◆ ~ControlBase()

HiEasyX::ControlBase::~ControlBase ( )
virtual

在文件 ControlBase.cpp32 行定义.

33  {
34  }

成员函数说明

◆ AddChild()

void HiEasyX::ControlBase::AddChild ( ControlBase p,
int  offset_x = 0,
int  offset_y = 0 
)
virtual

在文件 ControlBase.cpp118 行定义.

119  {
120  for (auto& child : m_listChild)
121  if (child == p)
122  return;
123  p->MoveRel(offset_x, offset_y);
124  p->m_pParent = this;
125  m_listChild.push_back(p);
126  ChildRectChanged(p);
127 
129  }

◆ CallUserMsgProcFunc()

void HiEasyX::ControlBase::CallUserMsgProcFunc ( int  msgid,
ExMessage  msg 
)
protectedvirtual

分发消息到用户函数

参数
[in]msgid消息 ID
[in]msg消息内容

在文件 ControlBase.cpp368 行定义.

369  {
370  if (m_funcMessageProc)
371  {
372  m_funcMessageProc(this, msgid, msg);
373  }
374  else if (m_funcMessageProc_Class)
375  {
376  m_funcMessageProc_Class(m_pCalledClass, this, msgid, msg);
377  }
378  }

◆ ChildRectChanged()

void HiEasyX::ControlBase::ChildRectChanged ( ControlBase pChild)
protectedvirtual

子控件区域变更

参数
[in]pChild区域变更的子控件

在文件 ControlBase.cpp380 行定义.

381  {
383  {
384  int _w = GetWidth(), _h = GetHeight();
385  if (pChild->m_rct.right > _w) _w += pChild->m_rct.right - _w;
386  if (pChild->m_rct.bottom > _h) _h += pChild->m_rct.bottom - _h;
387  Resize(_w, _h);
388  }
389  }

◆ Draw()

void HiEasyX::ControlBase::Draw ( bool  draw_child = true)
virtual

绘制控件

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

HiEasyX::ScrollBar, HiEasyX::ProgressCtrl, HiEasyX::Static , 以及 HiEasyX::Button 重载.

在文件 ControlBase.cpp224 行定义.

225  {
227  {
230  0, 0, GetWidth() - 1, GetHeight() - 1,
232  );
233 
235  {
236  m_bRedraw = false;
237  }
238  }
239 
240  if (draw_child)
241  {
242  DrawChild();
243  }
244  }

◆ Draw_Text()

void HiEasyX::ControlBase::Draw_Text ( int  nTextOffsetX = 0,
int  nTextOffsetY = 0 
)
virtual

HiEasyX::Static 重载.

在文件 ControlBase.cpp205 行定义.

206  {
209  int w = m_canvas.TextWidth(m_wstrText.c_str());
210  int h = m_canvas.TextHeight(m_wstrText.c_str());
212  (GetWidth() - w) / 2 + nTextOffsetX,
213  (GetHeight() - h) / 2 + nTextOffsetY,
214  m_wstrText.c_str()
215  );
216  }

◆ DrawChild()

void HiEasyX::ControlBase::DrawChild ( )
protectedvirtual

绘制子控件

在文件 ControlBase.cpp246 行定义.

247  {
248  for (auto& child : m_listChild)
249  {
250  child->Draw();
251  }
252  }

◆ EnableAutoRedraw()

void HiEasyX::ControlBase::EnableAutoRedraw ( bool  enable)
virtual

启用自动重绘(接受到基础消息事件时自动标识需要重绘)

参数
[in]enable是否启用

在文件 ControlBase.cpp154 行定义.

155  {
157  }

◆ EnableAutoSizeForChild()

void HiEasyX::ControlBase::EnableAutoSizeForChild ( bool  enable)
virtual

为子控件自动改变大小以容纳控件(不容纳负坐标部分)

参数
[in]enable是否启用

在文件 ControlBase.cpp100 行定义.

101  {
102  m_bAutoSizeForChild = enable;
103  }

◆ EnableBorder()

void HiEasyX::ControlBase::EnableBorder ( bool  bEnableBorder,
COLORREF  color = BLACK,
int  thickness = 1 
)
virtual

在文件 ControlBase.cpp175 行定义.

176  {
177  m_bEnableBorder = bEnableBorder;
178  if (bEnableBorder)
179  {
180  m_cBorder = color;
181  m_nBorderThickness = thickness;
182 
184  }
185 
187  }

◆ GetAutoRedrawState()

virtual bool HiEasyX::ControlBase::GetAutoRedrawState ( ) const
inlinevirtual

在文件 ControlBase.h187 行定义.

187 { return m_bAutoRedrawWhenReceiveMsg; }

◆ GetBkColor()

virtual COLORREF HiEasyX::ControlBase::GetBkColor ( ) const
inlinevirtual

在文件 ControlBase.h197 行定义.

197 { return m_cBackground; }

◆ GetCanvas()

virtual Canvas& HiEasyX::ControlBase::GetCanvas ( )
inlinevirtual

在文件 ControlBase.h195 行定义.

195 { return m_canvas; }

◆ GetChildCount()

size_t HiEasyX::ControlBase::GetChildCount ( )

获取子控件总数

在文件 ControlBase.cpp110 行定义.

111  {
112  size_t sum = m_listChild.size();
113  for (auto& child : m_listChild)
114  sum += child->GetChildCount();
115  return sum;
116  }

◆ GetChildList()

std::list< ControlBase * > & HiEasyX::ControlBase::GetChildList ( )

在文件 ControlBase.cpp105 行定义.

106  {
107  return m_listChild;
108  }

◆ GetParent()

ControlBase* HiEasyX::ControlBase::GetParent ( )
inline

在文件 ControlBase.h152 行定义.

152 { return m_pParent; }

◆ GetText()

virtual std::wstring HiEasyX::ControlBase::GetText ( ) const
inlinevirtual

在文件 ControlBase.h209 行定义.

209 { return m_wstrText; }

◆ GetTextColor()

virtual COLORREF HiEasyX::ControlBase::GetTextColor ( ) const
inlinevirtual

在文件 ControlBase.h201 行定义.

201 { return m_cText; }

◆ IsAutoSizeForChild()

virtual bool HiEasyX::ControlBase::IsAutoSizeForChild ( ) const
inlinevirtual

在文件 ControlBase.h160 行定义.

160 { return m_bAutoSizeForChild; }

◆ IsEnabled()

virtual bool HiEasyX::ControlBase::IsEnabled ( ) const
inlinevirtual

在文件 ControlBase.h179 行定义.

179 { return m_bEnabled; }

◆ IsFocused()

virtual bool HiEasyX::ControlBase::IsFocused ( ) const
inlinevirtual

判断是否拥有焦点

在文件 ControlBase.h261 行定义.

261 { return m_bFocused; }

◆ IsHovered()

virtual bool HiEasyX::ControlBase::IsHovered ( ) const
inlinevirtual

判断鼠标是否悬停

在文件 ControlBase.h256 行定义.

256 { return m_bHovered; }

◆ IsPressed()

virtual bool HiEasyX::ControlBase::IsPressed ( ) const
inlinevirtual

判断是否按下

在文件 ControlBase.h266 行定义.

266 { return m_bPressed; }

◆ IsVisible()

virtual bool HiEasyX::ControlBase::IsVisible ( ) const
inlinevirtual

在文件 ControlBase.h183 行定义.

183 { return m_bVisible; }

◆ MarkNeedClearRect()

void HiEasyX::ControlBase::MarkNeedClearRect ( RECT  rct)
protected

标记需要清空矩形区域

参数
[in]rct需要清空的区域

在文件 ControlBase.cpp72 行定义.

73  {
74  m_bClear = true;
75  m_rctClear = rct;
76  }

◆ MarkNeedRedrawAndRender()

void HiEasyX::ControlBase::MarkNeedRedrawAndRender ( )
protected

标记需要重绘和渲染

在文件 ControlBase.cpp62 行定义.

63  {
64  m_bRedraw = true;
65  m_bRender = true;
66 
67  // 重绘后,渲染时也要渲染子控件,否则会覆盖
68  for (auto& child : m_listChild)
69  child->m_bRender = true;
70  }

◆ Redraw()

void HiEasyX::ControlBase::Redraw ( )
virtual

重绘控件

在文件 ControlBase.cpp218 行定义.

219  {
221  Draw();
222  }

◆ RemoveChild()

void HiEasyX::ControlBase::RemoveChild ( ControlBase p)
virtual

在文件 ControlBase.cpp131 行定义.

132  {
133  m_listChild.remove(p);
134 
136  }

◆ Render()

void HiEasyX::ControlBase::Render ( Canvas dst,
RECT *  pRct = nullptr,
int *  pCount = 0 
)
virtual

渲染控件到外部

参数
[in]dst渲染目标
[in]pRct内部使用,传入父控件渲染区域数组
[in,out]pCount内部使用,传入父控件渲染区域数量指针

HiEasyX::Page 重载.

在文件 ControlBase.cpp254 行定义.

255  {
256  // 当前控件获取到的重绘矩形记录
257  size_t size = m_bRender ? 1 : GetChildCount(); // 若自身需要绘制,则只需要记录一个矩形
258  RECT* my_rct = new RECT[size];
259  int my_count = 0; // 当前控件获取到的重绘区域数量统计
260 
261  // 为当前控件的子控件执行清除任务
262  // 必须在 Render 前执行,否则可能覆盖效果
263  for (auto& child : m_listChild)
264  {
265  if (child->m_bClear)
266  {
267  m_canvas.ClearRectangle(child->m_rctClear);
268  MOVE_RECT(child->m_rctClear, m_rct.left, m_rct.top);
269  dst->ClearRectangle(child->m_rctClear);
270 
271  child->m_bClear = false;
272  child->m_rctClear = { 0 };
273  }
274  }
275 
276  // 控件必须可显示才渲染
277  if (m_bVisible)
278  {
279  // 子控件可能很多,开启批量绘制
281 
282  // 如果自身需要渲染,则只需要记录自身矩形
284  {
285  // 子控件先绘制到此控件画布上,再绘制到 dst
286  for (auto& child : m_listChild)
287  child->Render(&m_canvas);
288 
289  my_rct[my_count++] = { 0,0,GetWidth(),GetHeight() };
290 
292  m_bRender = false;
293  }
294 
295  // 若自身不渲染,则必须记录子控件渲染区域
296  else
297  {
298  for (auto& child : m_listChild)
299  {
300  child->Render(&m_canvas, my_rct, &my_count);
301  }
302  }
303 
305 
306  // 渲染有更新的区域
307  for (int i = 0; i < my_count; i++)
308  {
309  dst->PutImageIn_Alpha(
310  m_rct.left, m_rct.top,
311  &m_canvas,
312  my_rct[i],
314  );
315  }
316 
317  // 为了返回区域信息给父控件,需要转换区域坐标参考系
318  if (pRct)
319  {
320  for (int i = 0; i < my_count; i++)
321  {
322  MOVE_RECT(my_rct[i], m_rct.left, m_rct.top);
323  pRct[(*pCount)++] = my_rct[i];
324  }
325  }
326  }
327 
328  delete[] my_rct;
329 
330  /*for (auto& child : m_listChild)
331  child->Render(&m_canvas);
332  dst->PutImageIn_Alpha(
333  m_rct.left, m_rct.top,
334  &m_canvas,
335  { 0 },
336  m_alpha, m_bUseCanvasAlpha, m_isAlphaCalculated
337  );*/
338  }

◆ SetAlpha()

void HiEasyX::ControlBase::SetAlpha ( BYTE  alpha,
bool  bUseCanvasAlpha,
bool  isAlphaCalculated 
)
virtual

在文件 ControlBase.cpp189 行定义.

190  {
191  m_alpha = alpha;
192  m_bUseCanvasAlpha = bUseCanvasAlpha;
193  m_isAlphaCalculated = isAlphaCalculated;
194 
196  }

◆ SetBkColor()

void HiEasyX::ControlBase::SetBkColor ( COLORREF  color)
virtual

在文件 ControlBase.cpp159 行定义.

160  {
161  m_cBackground = color;
162  m_canvas.SetBkColor(color);
163 
165  }

◆ SetEnable()

void HiEasyX::ControlBase::SetEnable ( bool  enable)
virtual

HiEasyX::Button 重载.

在文件 ControlBase.cpp78 行定义.

79  {
80  m_bEnabled = enable;
81 
83  }

◆ SetMsgProcFunc() [1/2]

void HiEasyX::ControlBase::SetMsgProcFunc ( MESSAGE_PROC_FUNC  func)
virtual

设置消息响应函数

参数
[in]func消息响应函数

在文件 ControlBase.cpp340 行定义.

341  {
342  m_funcMessageProc = func;
343  m_funcMessageProc_Class = nullptr;
344  m_pCalledClass = nullptr;
345  }

◆ SetMsgProcFunc() [2/2]

void HiEasyX::ControlBase::SetMsgProcFunc ( MESSAGE_PROC_FUNC_CLASS  static_class_func,
void *  _this 
)
virtual

设置消息响应函数为静态类函数

参数
[in]static_class_func消息响应函数(静态类函数)
[in]_this类指针

在文件 ControlBase.cpp347 行定义.

348  {
349  m_funcMessageProc = nullptr;
350  m_funcMessageProc_Class = static_class_func;
351  m_pCalledClass = _this;
352  }

◆ SetParent()

void HiEasyX::ControlBase::SetParent ( ControlBase p)
virtual

设置父控件(父控件调用 AddChild)

参数
[in]p父控件

在文件 ControlBase.cpp85 行定义.

86  {
87  if (m_pParent)
88  {
89  m_pParent->RemoveChild(this);
90  }
91  if (p)
92  {
93  m_pParent = p;
94  p->AddChild(this);
95  }
96 
98  }

◆ SetText()

void HiEasyX::ControlBase::SetText ( std::wstring  wstr)
virtual

HiEasyX::Static 重载.

在文件 ControlBase.cpp198 行定义.

199  {
200  m_wstrText = wstr;
201 
203  }

◆ SetTextColor()

void HiEasyX::ControlBase::SetTextColor ( COLORREF  color)
virtual

在文件 ControlBase.cpp167 行定义.

168  {
169  m_cText = color;
170  m_canvas.SetTextColor(color);
171 
173  }

◆ SetVisible()

void HiEasyX::ControlBase::SetVisible ( bool  visible)
virtual

在文件 ControlBase.cpp138 行定义.

139  {
140  m_bVisible = bVisible;
141 
142  // 设为可见时重新渲染
143  if (m_bVisible)
144  {
145  m_bRender = true;
146  }
147  // 设为不可见时清除
148  else
149  {
151  }
152  }

◆ TransformMessage()

ExMessage & HiEasyX::ControlBase::TransformMessage ( ExMessage &  msg)
protectedvirtual

转换消息

参数
[in,out]msg要转换的消息
返回
转换后的消息

在文件 ControlBase.cpp354 行定义.

355  {
356  switch (GetExMessageType(msg))
357  {
358  case EM_MOUSE:
359  msg.x -= GetX();
360  msg.y -= GetY();
361  break;
362  default:
363  break;
364  }
365  return msg;
366  }

◆ UpdateMessage()

void HiEasyX::ControlBase::UpdateMessage ( ExMessage  msg)
virtual

更新消息

参数
[in]msg新消息

HiEasyX::ScrollBar , 以及 HiEasyX::Button 重载.

在文件 ControlBase.cpp391 行定义.

392  {
393  if (m_bVisible && m_bEnabled)
394  {
395  TransformMessage(msg);
396 
397  // 标识该消息是否值得重绘
398  bool msg_worth_redraw = false;
399 
400  // 鼠标在区域内
401  if (IsInRect(msg.x, msg.y, { 0,0,GetWidth(),GetHeight() }))
402  {
403  // 鼠标移入
404  if (!m_bHovered)
405  {
406  m_bHovered = true;
408  }
409 
410  switch (msg.message)
411  {
412  case WM_LBUTTONDOWN:
413  {
414  m_bPressed = true;
416  if (!m_bFocused)
417  {
418  m_bFocused = true;
420  }
421  }
422  break;
423 
424  case WM_LBUTTONUP:
425  {
426  m_bPressed = false;
427  if (m_bFocused)
428  {
431  }
432  }
433  break;
434 
435  case WM_LBUTTONDBLCLK:
436  {
438  }
439  break;
440 
441  default:
442  {
444  }
445  break;
446 
447  }
448 
449  msg_worth_redraw = true;
450  }
451 
452  // 鼠标不在区域内
453  else
454  {
455  // 移出
456  if (m_bHovered)
457  {
458  m_bHovered = false;
460 
461  msg_worth_redraw = true;
462  }
463 
464  // 离开区域,按下失效
465  if (m_bPressed)
466  {
467  m_bPressed = false;
469 
470  msg_worth_redraw = true;
471  }
472 
473  switch (msg.message)
474  {
475  case WM_LBUTTONDOWN:
476  {
477  if (m_bFocused)
478  {
479  m_bFocused = false;
481 
482  msg_worth_redraw = true;
483  }
484  }
485  break;
486 
487  default:
488  {
490  }
491  break;
492 
493  }
494  }
495 
496  // 默认重绘,且满足条件
497  if (m_bAutoRedrawWhenReceiveMsg && msg_worth_redraw)
498  {
500  }
501 
502  for (auto& child : m_listChild)
503  {
504  child->UpdateMessage(msg);
505  }
506  }
507  }

◆ UpdateRect()

void HiEasyX::ControlBase::UpdateRect ( RECT  rctOld)
overrideprotectedvirtual

更新区域消息处理

参数
[in]rctOld旧区域

重载 HiEasyX::Container .

HiEasyX::ScrollBar 重载.

在文件 ControlBase.cpp36 行定义.

37  {
38  Container::UpdateRect(rctOld);
39 
41 
42  // 标识重绘和渲染
44 
45  // 不是第一次设置位置时,需要清除旧区域
47  {
48  // 标识清空旧区域
49  MarkNeedClearRect(rctOld);
50  }
51  else
52  {
54  }
55 
56  if (m_pParent)
57  {
59  }
60  }

类成员变量说明

◆ m_alpha

BYTE HiEasyX::ControlBase::m_alpha = 255
protected

透明度

在文件 ControlBase.h70 行定义.

◆ m_bAlwaysRedrawAndRender

bool HiEasyX::ControlBase::m_bAlwaysRedrawAndRender = false
protected

总是重绘和渲染(占用更高)

在文件 ControlBase.h65 行定义.

◆ m_bAutoRedrawWhenReceiveMsg

bool HiEasyX::ControlBase::m_bAutoRedrawWhenReceiveMsg = true
protected

当默认消息处理函数接受到消息时,是否自动标识重绘和渲染

在文件 ControlBase.h60 行定义.

◆ m_bAutoSizeForChild

bool HiEasyX::ControlBase::m_bAutoSizeForChild = false
protected

为子控件自动改变大小以容纳控件

在文件 ControlBase.h86 行定义.

◆ m_bClear

bool HiEasyX::ControlBase::m_bClear = false
protected

标识需要清空某区域

在文件 ControlBase.h63 行定义.

◆ m_bCompleteFirstSetRect

bool HiEasyX::ControlBase::m_bCompleteFirstSetRect = false
protected

是否已经完成第一次设置区域

在文件 ControlBase.h81 行定义.

◆ m_bEnableBorder

bool HiEasyX::ControlBase::m_bEnableBorder = true
protected

是否绘制边框

在文件 ControlBase.h78 行定义.

◆ m_bEnabled

bool HiEasyX::ControlBase::m_bEnabled = true
protected

是否可用

在文件 ControlBase.h56 行定义.

◆ m_bFocused

bool HiEasyX::ControlBase::m_bFocused = false
protected

是否拥有焦点

在文件 ControlBase.h94 行定义.

◆ m_bHovered

bool HiEasyX::ControlBase::m_bHovered = false
protected

鼠标是否悬停

在文件 ControlBase.h92 行定义.

◆ m_bPressed

bool HiEasyX::ControlBase::m_bPressed = false
protected

鼠标是否按下

在文件 ControlBase.h93 行定义.

◆ m_bRedraw

bool HiEasyX::ControlBase::m_bRedraw = true
protected

标识需要重绘

在文件 ControlBase.h61 行定义.

◆ m_bRender

bool HiEasyX::ControlBase::m_bRender = true
protected

标识需要渲染

在文件 ControlBase.h62 行定义.

◆ m_bUseCanvasAlpha

bool HiEasyX::ControlBase::m_bUseCanvasAlpha = false
protected

是否使用画布自身的透明度信息

在文件 ControlBase.h71 行定义.

◆ m_bVisible

bool HiEasyX::ControlBase::m_bVisible = true
protected

是否可见

在文件 ControlBase.h57 行定义.

◆ m_canvas

Canvas HiEasyX::ControlBase::m_canvas
protected

画布

在文件 ControlBase.h69 行定义.

◆ m_cBackground

COLORREF HiEasyX::ControlBase::m_cBackground = CLASSICGRAY
protected

背景色

在文件 ControlBase.h75 行定义.

◆ m_cBorder

COLORREF HiEasyX::ControlBase::m_cBorder = MODERN_BORDER_GRAY
protected

边框颜色

在文件 ControlBase.h74 行定义.

◆ m_cText

COLORREF HiEasyX::ControlBase::m_cText = BLACK
protected

文本颜色

在文件 ControlBase.h76 行定义.

◆ m_funcMessageProc

MESSAGE_PROC_FUNC HiEasyX::ControlBase::m_funcMessageProc = nullptr
protected

消息处理函数

在文件 ControlBase.h88 行定义.

◆ m_funcMessageProc_Class

MESSAGE_PROC_FUNC_CLASS HiEasyX::ControlBase::m_funcMessageProc_Class = nullptr
protected

若绑定的消息处理函数是静态类函数,则记录其地址

在文件 ControlBase.h89 行定义.

◆ m_isAlphaCalculated

bool HiEasyX::ControlBase::m_isAlphaCalculated = false
protected

画布是否已经计算透明混合颜色

在文件 ControlBase.h72 行定义.

◆ m_listChild

std::list<ControlBase*> HiEasyX::ControlBase::m_listChild
protected

子控件

在文件 ControlBase.h84 行定义.

◆ m_nBorderThickness

int HiEasyX::ControlBase::m_nBorderThickness = 1
protected

边框粗细

在文件 ControlBase.h79 行定义.

◆ m_pCalledClass

void* HiEasyX::ControlBase::m_pCalledClass = nullptr
protected

若绑定的消息处理函数是静态类函数,则记录该类指针

在文件 ControlBase.h90 行定义.

◆ m_pParent

ControlBase* HiEasyX::ControlBase::m_pParent = nullptr
protected

父控件

在文件 ControlBase.h83 行定义.

◆ m_rctClear

RECT HiEasyX::ControlBase::m_rctClear = { 0 }
protected

记录需要清空的区域

在文件 ControlBase.h64 行定义.

◆ m_wstrText

std::wstring HiEasyX::ControlBase::m_wstrText
protected

控件文本

在文件 ControlBase.h67 行定义.


该类的文档由以下文件生成:
HiEasyX::ControlBase::MarkNeedRedrawAndRender
void MarkNeedRedrawAndRender()
标记需要重绘和渲染
Definition: ControlBase.cpp:62
HiEasyX::ControlBase::m_funcMessageProc_Class
MESSAGE_PROC_FUNC_CLASS m_funcMessageProc_Class
若绑定的消息处理函数是静态类函数,则记录其地址
Definition: ControlBase.h:89
HiEasyX::Container::Resize
void Resize(int w, int h)
Definition: HiContainer.cpp:51
HiEasyX::ControlBase::MarkNeedClearRect
void MarkNeedClearRect(RECT rct)
标记需要清空矩形区域
Definition: ControlBase.cpp:72
MOVE_RECT
#define MOVE_RECT(rct, dx, dy)
Definition: HiMacro.h:65
HiEasyX::Canvas::Resize
void Resize(int w, int h) override
重设画布大小(若绑定了窗口,则不建议调用)
Definition: HiCanvas.cpp:366
HiEasyX::ControlBase::m_wstrText
std::wstring m_wstrText
控件文本
Definition: ControlBase.h:67
HiEasyX::CM_HOVER_OVER
悬停结束
Definition: ControlBase.h:24
HiEasyX::CM_DOUBLE_CLICK
双击
Definition: ControlBase.h:28
HiEasyX::Canvas::ClearRectangle
void ClearRectangle(int left, int top, int right, int bottom)
Definition: HiCanvas.cpp:829
HiEasyX::ControlBase::m_bRender
bool m_bRender
标识需要渲染
Definition: ControlBase.h:62
HiEasyX::ControlBase::m_funcMessageProc
MESSAGE_PROC_FUNC m_funcMessageProc
消息处理函数
Definition: ControlBase.h:88
HiEasyX::ControlBase::m_bVisible
bool m_bVisible
是否可见
Definition: ControlBase.h:57
HiEasyX::ControlBase::DrawChild
virtual void DrawChild()
绘制子控件
Definition: ControlBase.cpp:246
HiEasyX::Canvas::TextHeight
int TextHeight(LPCTSTR lpszText)
Definition: HiCanvas.cpp:1231
HiEasyX::ControlBase::m_bAlwaysRedrawAndRender
bool m_bAlwaysRedrawAndRender
总是重绘和渲染(占用更高)
Definition: ControlBase.h:65
HiEasyX::Container::GetX
int GetX() const
Definition: HiContainer.h:53
HiEasyX::ControlBase::m_bFocused
bool m_bFocused
是否拥有焦点
Definition: ControlBase.h:94
HiEasyX::Container::GetY
int GetY() const
Definition: HiContainer.h:55
HiEasyX::Container::UpdateRect
virtual void UpdateRect(RECT rctOld)
响应更新区域消息
Definition: HiContainer.cpp:13
HiEasyX::Container::GetWidth
int GetWidth() const
Definition: HiContainer.h:65
HiEasyX::CM_PRESS
按下
Definition: ControlBase.h:25
HiEasyX::ControlBase::m_pParent
ControlBase * m_pParent
父控件
Definition: ControlBase.h:83
HiEasyX::ControlBase::m_rctClear
RECT m_rctClear
记录需要清空的区域
Definition: ControlBase.h:64
HiEasyX::ControlBase::m_cText
COLORREF m_cText
文本颜色
Definition: ControlBase.h:76
HiEasyX::ControlBase::m_pCalledClass
void * m_pCalledClass
若绑定的消息处理函数是静态类函数,则记录该类指针
Definition: ControlBase.h:90
HiEasyX::Container::GetHeight
int GetHeight() const
Definition: HiContainer.h:69
HiEasyX::Canvas::SetLineThickness
void SetLineThickness(int thickness)
Definition: HiCanvas.cpp:505
HiEasyX::ControlBase::RemoveChild
virtual void RemoveChild(ControlBase *p)
Definition: ControlBase.cpp:131
HiEasyX::CM_FOCUS
获取焦点
Definition: ControlBase.h:29
HiEasyX::Canvas::SetTextColor
void SetTextColor(COLORREF color)
Definition: HiCanvas.cpp:636
GetExMessageType
UINT GetExMessageType(ExMessage msg)
获取 ExMessage 的消息类型
Definition: HiFunc.cpp:100
HiEasyX::Canvas::BeginBatchDrawing
void BeginBatchDrawing()
Definition: HiCanvas.cpp:410
HiEasyX::ControlBase::m_listChild
std::list< ControlBase * > m_listChild
子控件
Definition: ControlBase.h:84
HiEasyX::ControlBase::m_canvas
Canvas m_canvas
画布
Definition: ControlBase.h:69
HiEasyX::Canvas::OutTextXY
int OutTextXY(int x, int y, LPCTSTR lpszText, bool isSetColor=false, COLORREF c=0)
在指定位置输出文本
Definition: HiCanvas.cpp:1163
HiEasyX::CM_HOVER
悬停
Definition: ControlBase.h:23
HiEasyX::ControlBase::m_bEnableBorder
bool m_bEnableBorder
是否绘制边框
Definition: ControlBase.h:78
HiEasyX::ControlBase::Draw
virtual void Draw(bool draw_child=true)
绘制控件
Definition: ControlBase.cpp:224
HiEasyX::Canvas::TextWidth
int TextWidth(LPCTSTR lpszText)
获取文本像素宽度
Definition: HiCanvas.cpp:1209
HiEasyX::ControlBase::m_bHovered
bool m_bHovered
鼠标是否悬停
Definition: ControlBase.h:92
HiEasyX::ControlBase::ChildRectChanged
virtual void ChildRectChanged(ControlBase *pChild)
子控件区域变更
Definition: ControlBase.cpp:380
HiEasyX::ControlBase::m_bEnabled
bool m_bEnabled
是否可用
Definition: ControlBase.h:56
HiEasyX::Container::m_rct
RECT m_rct
容器区域
Definition: HiContainer.h:20
HiEasyX::Canvas::FillRectangle
void FillRectangle(int left, int top, int right, int bottom, bool isSetColor=false, COLORREF cLine=0, COLORREF cFill=0)
Definition: HiCanvas.cpp:794
HiEasyX::ControlBase::m_bAutoSizeForChild
bool m_bAutoSizeForChild
为子控件自动改变大小以容纳控件
Definition: ControlBase.h:86
HiEasyX::Container::SetRect
void SetRect(int x, int y, int w, int h)
设置位置和宽高
Definition: HiContainer.cpp:26
HiEasyX::ControlBase::GetChildCount
size_t GetChildCount()
获取子控件总数
Definition: ControlBase.cpp:110
HiEasyX::CM_CLICK
单击
Definition: ControlBase.h:27
HiEasyX::ControlBase::CallUserMsgProcFunc
virtual void CallUserMsgProcFunc(int msgid, ExMessage msg)
分发消息到用户函数
Definition: ControlBase.cpp:368
HiEasyX::Canvas::SetBkColor
void SetBkColor(COLORREF color)
Definition: HiCanvas.cpp:676
IsInRect
bool IsInRect(int x, int y, RECT rct)
点是否位于矩形内
Definition: HiFunc.cpp:93
HiEasyX::ControlBase::m_nBorderThickness
int m_nBorderThickness
边框粗细
Definition: ControlBase.h:79
HiEasyX::ControlBase::SetText
virtual void SetText(std::wstring wstr)
Definition: ControlBase.cpp:198
HiEasyX::CM_FOCUS_OVER
丢失焦点
Definition: ControlBase.h:30
HiEasyX::ControlBase::m_bAutoRedrawWhenReceiveMsg
bool m_bAutoRedrawWhenReceiveMsg
当默认消息处理函数接受到消息时,是否自动标识重绘和渲染
Definition: ControlBase.h:60
HiEasyX::ControlBase::AddChild
virtual void AddChild(ControlBase *p, int offset_x=0, int offset_y=0)
Definition: ControlBase.cpp:118
HiEasyX::ControlBase::m_bClear
bool m_bClear
标识需要清空某区域
Definition: ControlBase.h:63
HiEasyX::ControlBase::TransformMessage
virtual ExMessage & TransformMessage(ExMessage &msg)
转换消息
Definition: ControlBase.cpp:354
HiEasyX::Canvas::SetLineColor
void SetLineColor(COLORREF color)
Definition: HiCanvas.cpp:616
HiEasyX::CM_PRESS_OVER
按下结束
Definition: ControlBase.h:26
HiEasyX::CM_OTHER
未特殊标识的其它消息
Definition: ControlBase.h:22
HiEasyX::ControlBase::m_bPressed
bool m_bPressed
鼠标是否按下
Definition: ControlBase.h:93
HiEasyX::ControlBase::m_bUseCanvasAlpha
bool m_bUseCanvasAlpha
是否使用画布自身的透明度信息
Definition: ControlBase.h:71
HiEasyX::ControlBase::m_bCompleteFirstSetRect
bool m_bCompleteFirstSetRect
是否已经完成第一次设置区域
Definition: ControlBase.h:81
HiEasyX::Canvas::EndBatchDrawing
void EndBatchDrawing()
Definition: HiCanvas.cpp:418
HiEasyX::ControlBase::m_bRedraw
bool m_bRedraw
标识需要重绘
Definition: ControlBase.h:61
HiEasyX::ControlBase::m_isAlphaCalculated
bool m_isAlphaCalculated
画布是否已经计算透明混合颜色
Definition: ControlBase.h:72
HiEasyX::ControlBase::m_alpha
BYTE m_alpha
透明度
Definition: ControlBase.h:70
HiEasyX::ControlBase::m_cBackground
COLORREF m_cBackground
背景色
Definition: ControlBase.h:75
HiEasyX::ControlBase::m_cBorder
COLORREF m_cBorder
边框颜色
Definition: ControlBase.h:74