soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SCmnCtrl.h
Go to the documentation of this file.
1/**
2 * @file SCmnCtrl.h
3 * @brief 通用控件
4 * @version v1.0
5 * @author soui
6 * @date 2014-05-28
7 *
8 * @details 此文件中定义了很多通用控件:静态文本、超链接、按钮、单选按钮等。
9 */
10
11#ifndef __SCMNCTRL__H__
12#define __SCMNCTRL__H__
13#include <core/SWnd.h>
14#include <core/SAccelerator.h>
15#include <core/SFocusManager.h>
16#include <interface/SCtrl-i.h>
17#include <proxy/SWindowProxy.h>
18
19SNSBEGIN
20
21/**
22 * @class SStatic
23 * @brief 静态文本控件类
24 * @details 静态文本控件可支持多行,有多行属性时,`\n`可以强制换行。
25 * @usage `<text>inner text example</text>`
26 */
27class SOUI_EXP SStatic : public SWindow {
28 DEF_SOBJECT(SWindow, L"text")
29
30 public:
31 /**
32 * @brief 构造函数
33 */
34 SStatic();
35
36 /**
37 * @brief 绘制文本
38 * @param pRT 绘制设备句柄
39 * @param pszBuf 文本内容字符串
40 * @param cchText 字符串长度
41 * @param pRect 指向矩形结构RECT的指针
42 * @param uFormat 正文的绘制选项
43 * @details 对DrawText封装
44 */
45 virtual void DrawText(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText, LPRECT pRect, UINT uFormat);
46
47 protected:
48 /**
49 * @brief 绘制单行文本
50 * @param pRT 绘制设备句柄
51 * @param pszBuf 文本内容字符串
52 * @param iBegin 文本起始位置
53 * @param cchText 字符串长度
54 * @param pRect 指向矩形结构RECT的指针
55 * @param uFormat 正文的绘制选项
56 */
57 virtual void OnDrawLine(IRenderTarget *pRT, LPCTSTR pszBuf, int iBegin, int cchText, LPRECT pRect, UINT uFormat);
58
59 /**
60 * @brief 测量文本大小
61 * @param pRT 绘制设备句柄
62 * @param pszBuf 文本内容字符串
63 * @param cchText 字符串长度
64 * @return 文本大小
65 */
66 virtual SIZE OnMeasureText(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText);
67
68 /**
69 * @brief 绘制多行文本
70 * @param pRT 绘制设备句柄
71 * @param pszBuf 文本内容字符串
72 * @param cchText 字符串长度
73 * @param pRect 指向矩形结构RECT的指针
74 * @param uFormat 正文的绘制选项
75 */
76 void DrawMultiLine(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText, LPRECT pRect, UINT uFormat);
77
78 protected:
79 /**
80 * @brief 行间距
81 */
83
84 /**
85 * @brief 是否自动换行
86 */
88
89 SOUI_ATTRS_BEGIN()
90 ATTR_INT(L"interHeight", m_nLineInter, TRUE)
91 ATTR_BOOL(L"wordBreak", m_bWordbreak, TRUE)
92 SOUI_ATTRS_END()
93};
94/**
95 * @class SLink
96 * @brief 超链接控件类
97 * @details 用于显示超链接文本。
98 * @usage `<link>inner text example</link>`
99 */
100class SOUI_EXP SLink : public SWindow {
101 DEF_SOBJECT(SWindow, L"link")
102
103 public:
104 /**
105 * @brief 构造函数
106 */
107 SLink();
108
109 protected:
110 /**
111 * @brief 解析XML设置属性
112 * @param pNode XML节点
113 * @details 根据XML文件设置相关属性
114 */
115 virtual void WINAPI OnInitFinished(IXmlNode *pNode);
116
117 /**
118 * @brief 绘制文本
119 * @param pRT 绘制设备句柄
120 * @param pszBuf 文本内容字符串
121 * @param cchText 字符串长度
122 * @param pRect 指向矩形结构RECT的指针
123 * @param uFormat 正文的绘制选项
124 * @details 对DrawText封装
125 */
126 virtual void DrawText(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText, LPRECT pRect, UINT uFormat);
127
128 /**
129 * @brief 设置光标样式和位置
130 * @param pt 设置光标位置
131 * @return 成功--TRUE 失败--FALSE
132 * @details 函数内部会加载光标样式
133 */
134 virtual BOOL OnSetCursor(const CPoint &pt);
135
136 /**
137 * @brief 处理左键按下事件
138 * @param nFlags 标志
139 * @param pt 鼠标坐标
140 */
141 void OnLButtonDown(UINT nFlags, CPoint pt);
142
143 /**
144 * @brief 处理左键释放事件
145 * @param nFlags 标志
146 * @param pt 鼠标坐标
147 */
148 void OnLButtonUp(UINT nFlags, CPoint pt);
149
150 /**
151 * @brief 处理鼠标移动事件
152 * @param nFlags 标志
153 * @param pt 鼠标坐标
154 */
155 void OnMouseMove(UINT nFlags, CPoint pt);
156
157 /**
158 * @brief 处理鼠标悬停事件
159 * @param wParam 额外参数
160 * @param ptPos 鼠标位置
161 */
162 void OnMouseHover(WPARAM wParam, CPoint ptPos);
163
164 protected:
165 /**
166 * @brief 文本显示所在位置
167 */
168 CRect m_rcText;
169
170 /**
171 * @brief 窗口URL
172 */
173 SStringT m_strLinkUrl;
174
175 SOUI_ATTRS_BEGIN()
176 ATTR_STRINGT(L"href", m_strLinkUrl, FALSE)
177 SOUI_ATTRS_END()
178
179 SOUI_MSG_MAP_BEGIN()
180 MSG_WM_LBUTTONDOWN(OnLButtonDown)
181 MSG_WM_LBUTTONUP(OnLButtonUp)
182 MSG_WM_MOUSEMOVE(OnMouseMove)
183 MSG_WM_MOUSEHOVER(OnMouseHover)
184 SOUI_MSG_MAP_END()
185};
186
187/**
188 * @class SButton
189 * @brief 按钮控件类
190 * @details 通过属性ID绑定click事件。使用id属性来处理点击事件。
191 * @usage `<button id=xx>inner text example</button>`
192 */
193class SOUI_EXP SButton
194 : public SWindow
195 , public IAcceleratorTarget
196 , public ITimelineHandler {
197 DEF_SOBJECT(SWindow, L"button")
198
199 public:
200 /**
201 * @brief 构造函数
202 */
203 SButton();
204
205 protected:
206 /**
207 * @brief 状态变化需要重画
208 * @return 成功--TRUE 失败--FALSE
209 * @details 当按钮状态发生变化时需要重新绘制,默认返回TRUE
210 */
212 {
213 return TRUE;
214 }
215
216 /**
217 * @brief 获取编码
218 * @return 返回宏定义SC_WANTCHARS代表需要WM_CHAR消息
219 */
220 virtual UINT WINAPI OnGetDlgCode() const
221 {
222 return SC_WANTCHARS;
223 }
224
225 /**
226 * @brief 处理加速键按下事件
227 * @param accelerator 加速键相关结构体
228 * @return 成功--TRUE 失败--FALSE
229 * @details 处理加速键响应消息
230 */
231 virtual BOOL WINAPI OnAcceleratorPressed(const IAccelerator *accelerator) OVERRIDE;
232
233 /**
234 * @brief 从XML初始化控件
235 * @param pNode XML节点
236 * @return 成功--TRUE 失败--FALSE
237 */
238 virtual BOOL WINAPI InitFromXml(IXmlNode *pNode) OVERRIDE;
239
240 protected:
241 /**
242 * @brief 状态改变处理函数
243 * @param dwOldState 旧状态
244 * @param dwNewState 新状态
245 */
246 virtual void OnStateChanged(DWORD dwOldState, DWORD dwNewState);
247
248 /**
249 * @brief 容器改变处理函数
250 * @param pOldContainer 旧容器
251 * @param pNewContainer 新容器
252 */
253 virtual void OnContainerChanged(ISwndContainer *pOldContainer, ISwndContainer *pNewContainer);
254
255 /**
256 * @brief 绘制控件
257 * @param pRT 绘制设备句柄
258 */
259 void OnPaint(IRenderTarget *pRT);
260
261 /**
262 * @brief 处理按键按下事件
263 * @param nChar 字符
264 * @param nRepCnt 重复次数
265 * @param nFlags 标志
266 */
267 void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
268
269 /**
270 * @brief 处理按键释放事件
271 * @param nChar 字符
272 * @param nRepCnt 重复次数
273 * @param nFlags 标志
274 */
275 void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
276
277 /**
278 * @brief 处理销毁事件
279 */
280 void OnDestroy();
281
282 /**
283 * @brief 处理大小改变事件
284 * @param nType 类型
285 * @param size 新大小
286 */
287 void OnSize(UINT nType, CSize size);
288
289 /**
290 * @brief 处理擦除背景事件
291 * @param pRT 绘制设备句柄
292 * @return 成功--TRUE 失败--FALSE
293 */
295 {
296 return TRUE;
297 }
298
299 /**
300 * @brief 处理自定义属性accel
301 * @param strAccel 加速键字符串
302 * @param bLoading 是否加载中
303 * @return 成功--TRUE 失败--FALSE
304 */
305 HRESULT OnAttrAccel(SStringW strAccel, BOOL bLoading);
306
307 protected:
308 /**
309 * @brief 处理下一帧事件
310 */
311 STDMETHOD_(void, OnNextFrame)(THIS_) OVERRIDE;
312
313 /**
314 * @brief 停止动画
315 */
316 void StopCurAnimate();
317
318 /**
319 * @brief 加速键
320 */
321 DWORD m_accel;
322
323 /**
324 * @brief 动画标志
325 */
327
328 /**
329 * @brief 动画状态
330 */
332
333 /**
334 * @brief alpha for animate step
335 */
337
338 /**
339 * @brief 禁用不可见时的加速键
340 */
342
343 SOUI_ATTRS_BEGIN()
344 ATTR_CUSTOM(L"accel", OnAttrAccel)
345 ATTR_BOOL(L"animate", m_bAnimate, FALSE)
346 ATTR_INT(L"animateStep", m_nAniStep, FALSE)
347 ATTR_BOOL(L"disableAccelIfInvisible", m_bDisableAccelIfInvisible, FALSE)
348 SOUI_ATTRS_END()
349
350 SOUI_MSG_MAP_BEGIN()
351 MSG_WM_PAINT_EX(OnPaint)
352 MSG_WM_ERASEBKGND_EX(OnEraseBkgnd)
353 MSG_WM_LBUTTONDBLCLK(OnLButtonDown) // 将双击消息处理为单击
354 MSG_WM_KEYDOWN(OnKeyDown)
355 MSG_WM_KEYUP(OnKeyUp)
356 MSG_WM_DESTROY(OnDestroy)
357 MSG_WM_SIZE(OnSize)
358 SOUI_MSG_MAP_END()
359};
360
361/**
362 * @class SImageButton
363 * @brief 图片按钮类
364 * @details 继承自SButton,用于显示图片按钮。
365 */
366class SOUI_EXP SImageButton : public SButton {
367 DEF_SOBJECT(SButton, L"imgbtn")
368
369 public:
370 /**
371 * @brief 构造函数
372 */
373 SImageButton();
374
375 protected:
376 /**
377 * @brief 测量内容大小
378 * @param wid 父容器宽度
379 * @param hei 父容器高度
380 * @return 内容大小
381 */
382 SIZE MeasureContent(int wid, int hei) override;
383};
384
385/**
386 * @class SImageWnd
387 * @brief 图片控件类
388 * @details 用于显示图片。
389 * @usage `<img skin="skin" sub="0"/>`
390 */
391class SOUI_EXP SImageWnd : public TWindowProxy<IImageWnd> {
392 DEF_SOBJECT(SWindow, L"img")
393
394 public:
395 /**
396 * @brief 构造函数
397 */
398 SImageWnd();
399
400 /**
401 * @brief 析构函数
402 */
403 virtual ~SImageWnd();
404
405 public:
406 /**
407 * @brief 设置skin
408 * @param pSkin skin对象
409 * @param iFrame skin的子图索引
410 * @param bAutoFree 控件管理pSkin标志,为TRUE时调用方可以释放该Skin
411 * @return 成功--TRUE 失败--FALSE
412 */
413 STDMETHOD_(BOOL, SetSkin)(THIS_ ISkinObj *pSkin, int iFrame DEF_VAL(0), BOOL bAutoFree DEF_VAL(TRUE)) OVERRIDE;
414
415 /**
416 * @brief 获取资源
417 * @return ISkinObj指针
418 */
419 STDMETHOD_(ISkinObj *, GetSkin)(THIS) OVERRIDE;
420
421 /**
422 * @brief 设置绘制图片
423 * @param pBitmap 图片对象
424 * @param fl FilterLevel
425 */
426 STDMETHOD_(void, SetImage)(THIS_ IBitmapS *pBitmap, FilterLevel fl DEF_VAL(kNone_FilterLevel)) OVERRIDE;
427
428 /**
429 * @brief 获取当前设置的IBitmapS对象
430 * @return 当前设置的IBitmapS对象
431 */
432 STDMETHOD_(IBitmapS *, GetImage)(THIS) OVERRIDE;
433
434 /**
435 * @brief 设置图标
436 * @param nSubID 子图在Skin中的索引号
437 * @return 成功--TRUE 失败--FALSE
438 */
439 STDMETHOD_(BOOL, SetIcon)(THIS_ int nSubID) OVERRIDE;
440
441 protected:
442 /**
443 * @brief 处理颜色化事件
444 * @param cr 颜色
445 */
446 virtual void OnColorize(COLORREF cr);
447
448 /**
449 * @brief 处理缩放变化事件
450 * @param scale 缩放比例
451 */
452 virtual void OnScaleChanged(int scale);
453
454 /**
455 * @brief 测量内容大小
456 * @param nParentWid 父容器宽度
457 * @param nParentHei 父容器高度
458 * @return 内容大小
459 */
460 virtual SIZE MeasureContent(int nParentWid, int nParentHei);
461
462 protected:
463 /**
464 * @brief 绘制是否平铺, 0--位伸(默认),1--不变常规绘制, 2--平铺
465 */
467
468 /**
469 * @brief 是否要自动释放当前的m_pSkin对象
470 */
472
473 /**
474 * @brief 绘制状态索引
475 */
477
478 /**
479 * @brief ISkinObj对象
480 */
482
483 /**
484 * @brief 使用代码设定的图片
485 */
487
488 /**
489 * @brief 绘制图片的放大精度
490 */
491 FilterLevel m_fl;
492
493 /**
494 * @brief 保持纵横比
495 */
497
498 SOUI_ATTRS_BEGIN()
499 ATTR_SKIN(L"skin", m_pSkin, TRUE)
500 ATTR_INT(L"iconIndex", m_iIcon, FALSE)
501 ATTR_INT(L"tile", m_iTile, TRUE)
502 ATTR_BOOL(L"keepAspect", m_bKeepAspect, TRUE)
503 SOUI_ATTRS_END()
504
505 protected:
506 /**
507 * @brief 绘制控件
508 * @param pRT 绘制设备句柄
509 */
510 void OnPaint(IRenderTarget *pRT);
511
512 SOUI_MSG_MAP_BEGIN()
513 MSG_WM_PAINT_EX(OnPaint)
514 SOUI_MSG_MAP_END()
515};
516
517/**
518 * @class SAnimateImgWnd
519 * @brief 动画图片窗口
520 * @details 此窗口支持动画效果。
521 */
522class SOUI_EXP SAnimateImgWnd
523 : public TWindowProxy<IAnimateImgWnd>
524 , public ITimelineHandler {
525 DEF_SOBJECT(SWindow, L"animateimg")
526
527 public:
528 /**
529 * @brief 构造函数
530 */
532
533 /**
534 * @brief 析构函数
535 */
537 {
538 }
539
540 /**
541 * @brief 启动动画
542 */
543 void WINAPI Start();
544
545 /**
546 * @brief 停止动画
547 */
548 void WINAPI Stop();
549
550 /**
551 * @brief 判断动画运行状态
552 * @return 运行中--TRUE
553 */
554 BOOL WINAPI IsPlaying() SCONST
555 {
556 return m_bPlaying;
557 }
558
559 protected:
560 /**
561 * @brief 测量内容大小
562 * @param wid 父容器宽度
563 * @param hei 父容器高度
564 * @return 内容大小
565 */
566 virtual SIZE MeasureContent(int wid, int hei);
567
568 /**
569 * @brief 处理下一帧事件
570 */
571 STDMETHOD_(void, OnNextFrame)(THIS_) OVERRIDE;
572
573 /**
574 * @brief 处理颜色化事件
575 * @param cr 颜色
576 */
577 virtual void OnColorize(COLORREF cr);
578
579 /**
580 * @brief 容器改变处理函数
581 * @param pOldContainer 旧容器
582 * @param pNewContainer 新容器
583 */
584 virtual void OnContainerChanged(ISwndContainer *pOldContainer, ISwndContainer *pNewContainer);
585
586 /**
587 * @brief 处理缩放变化事件
588 * @param scale 缩放比例
589 */
590 void OnScaleChanged(int scale) override;
591
592 /**
593 * @brief 绘制控件
594 * @param pRT 绘制设备句柄
595 */
596 void OnPaint(IRenderTarget *pRT);
597
598 /**
599 * @brief 处理显示窗口事件
600 * @param bShow 显示状态
601 * @param nStatus 状态
602 */
603 void OnShowWindow(BOOL bShow, UINT nStatus);
604
605 /**
606 * @brief 处理销毁事件
607 */
608 void OnDestroy();
609
610 SOUI_MSG_MAP_BEGIN()
611 MSG_WM_PAINT_EX(OnPaint)
612 MSG_WM_DESTROY(OnDestroy)
613 MSG_WM_SHOWWINDOW(OnShowWindow)
614 SOUI_MSG_MAP_END()
615
616 SOUI_ATTRS_BEGIN()
617 ATTR_SKIN(L"skin", m_pSkin, TRUE)
618 ATTR_UINT(L"speed", m_nSpeed, FALSE)
619 ATTR_BOOL(L"autoStart", m_bAutoStart, FALSE)
620 ATTR_INT(L"repeat", m_nRepeat, FALSE)
621 SOUI_ATTRS_END()
622
623 protected:
624 /**
625 * @brief 动画图片
626 */
628
629 /**
630 * @brief 速度
631 */
633
634 /**
635 * @brief 当前帧
636 */
638
639 /**
640 * @brief 是否自动启动
641 */
643
644 /**
645 * @brief 是否运行中
646 */
648
649 /**
650 * @brief OnNextFrame的执行次数
651 */
653
654 /**
655 * @brief 播放循环次数,-1代表无限循环
656 */
658
659 /**
660 * @brief 当前播放循环轮次
661 */
663};
664
665/**
666 * @class SProgress
667 * @brief 进度条类
668 * @details 进度条控件。
669 * @usage `<progress bgskin=xx posskin=xx min=0 max=100 value=10,showpercent=0/>`
670 */
671class SOUI_EXP SProgress : public TWindowProxy<IProgress> {
672 DEF_SOBJECT(SWindow, L"progress")
673
674 public:
675 /**
676 * @brief 构造函数
677 */
678 SProgress();
679
680 /**
681 * @brief 设置进度条进度值
682 * @param nValue 进度值
683 * @return 设置成功--TRUE
684 */
685 STDMETHOD_(BOOL, SetValue)(THIS_ int nValue) OVERRIDE;
686
687 /**
688 * @brief 获取进度值
689 * @return 进度值
690 */
691 STDMETHOD_(int, GetValue)(CTHIS) SCONST OVERRIDE
692 {
693 return m_nValue;
694 }
695
696 /**
697 * @brief 设置进度值最小大值
698 * @param nMin 进度最小值
699 * @param nMax 进度最大值
700 */
701 STDMETHOD_(void, SetRange)(THIS_ int nMin, int nMax) OVERRIDE;
702
703 /**
704 * @brief 获取进度值最小大值
705 * @param pMin 进度最小值
706 * @param pMax 进度最大值
707 */
708 STDMETHOD_(void, GetRange)(CTHIS_ int *pMin, int *pMax) SCONST OVERRIDE;
709
710 /**
711 * @brief 判断进度条是否为竖直状态
712 * @return 竖直状态--TRUE
713 */
714 STDMETHOD_(BOOL, IsVertical)(CTHIS) SCONST OVERRIDE
715 {
716 return m_bVertical;
717 }
718
719 protected:
720 /**
721 * @brief 获取预期大小
722 * @param psz 输出大小
723 * @param wid 父容器宽度
724 * @param hei 父容器高度
725 */
726 STDMETHOD_(void, GetDesiredSize)(THIS_ SIZE *psz, int wid, int hei) OVERRIDE;
727
728 /**
729 * @brief 处理颜色化事件
730 * @param cr 颜色
731 */
732 virtual void OnColorize(COLORREF cr);
733
734 /**
735 * @brief 处理缩放变化事件
736 * @param scale 缩放比例
737 */
738 virtual void OnScaleChanged(int scale);
739
740 /**
741 * @brief 绘制控件
742 * @param pRT 绘制设备句柄
743 */
744 void OnPaint(IRenderTarget *pRT);
745
746 /**
747 * @brief 处理创建事件
748 * @param lp 创建参数
749 * @return 成功--0
750 */
751 int OnCreate(void *);
752
753 /**
754 * @brief 进度最小值
755 */
757
758 /**
759 * @brief 进度最大值
760 */
762
763 /**
764 * @brief 进度值
765 */
767
768 /**
769 * @brief 是否显示百分比
770 */
772
773 /**
774 * @brief 是否竖直状态
775 */
777
778 /**
779 * @brief 背景资源
780 */
782
783 /**
784 * @brief 前景资源
785 */
787
788 SOUI_MSG_MAP_BEGIN()
789 MSG_WM_PAINT_EX(OnPaint)
790 MSG_WM_CREATE(OnCreate)
791 SOUI_MSG_MAP_END()
792
793 SOUI_ATTRS_BEGIN()
794 ATTR_SKIN(L"bkgndSkin", m_pSkinBg, TRUE)
795 ATTR_SKIN(L"posSkin", m_pSkinPos, TRUE)
796 ATTR_INT(L"min", m_nMinValue, FALSE)
797 ATTR_INT(L"max", m_nMaxValue, FALSE)
798 ATTR_INT(L"value", m_nValue, FALSE)
799 ATTR_BOOL(L"vertical", m_bVertical, FALSE)
800 ATTR_BOOL(L"showPercent", m_bShowPercent, FALSE)
801 SOUI_ATTRS_END()
802};
803
804/**
805 * @class SLine
806 * @brief 线条控件
807 * @details 线条控件。
808 * @usage `<hr size=1 mode="vert" lineStyle="dash"/>`
809 */
810class SOUI_EXP SLine : public SWindow {
811 DEF_SOBJECT(SWindow, L"hr")
812
813 public:
814 /**
815 * @brief 构造函数
816 */
817 SLine();
818
819 /**
820 * @brief 绘制控件
821 * @param pRT 绘制设备句柄
822 */
823 void OnPaint(IRenderTarget *pRT);
824
825 protected:
826 /**
827 * @brief 线条样式
828 */
830
831 /**
832 * @brief 线条大小
833 */
835
836 /**
837 * @brief 线条颜色
838 */
839 COLORREF m_crLine;
840
841 /**
842 * @brief 线条模式枚举
843 */
845 {
846 HR_HORZ = 0,
847 HR_VERT,
848 HR_TILT,
849 } m_mode;
850
851 SOUI_ATTRS_BEGIN()
852 ATTR_COLOR(L"colorLine", m_crLine, FALSE)
853 ATTR_COLOR(L"lineColor", m_crLine, FALSE)
854 ATTR_INT(L"lineSize", m_nLineSize, FALSE)
855 ATTR_ENUM_BEGIN(L"mode", HRMODE, FALSE)
856 ATTR_ENUM_VALUE(L"vertical", HR_VERT)
857 ATTR_ENUM_VALUE(L"horizontal", HR_HORZ)
858 ATTR_ENUM_VALUE(L"tilt", HR_TILT)
859 ATTR_ENUM_END(m_mode)
860 ATTR_ENUM_BEGIN(L"lineStyle", int, FALSE)
861 ATTR_ENUM_VALUE(L"solid", PS_SOLID) // default
862 ATTR_ENUM_VALUE(L"dash", PS_DASH) /* ------- */
863 ATTR_ENUM_VALUE(L"dot", PS_DOT) /* ....... */
864 ATTR_ENUM_VALUE(L"dashdot", PS_DASHDOT) /* _._._._ */
865 ATTR_ENUM_VALUE(L"dashdotdot", PS_DASHDOTDOT) /* _.._.._ */
866 ATTR_ENUM_END(m_nLineStyle)
867 SOUI_ATTRS_END()
868
869 SOUI_MSG_MAP_BEGIN()
870 MSG_WM_PAINT_EX(OnPaint)
871 SOUI_MSG_MAP_END()
872};
873
874/**
875 * @class SCheckBox
876 * @brief 复选框控件类
877 * @details 用于实现复选框功能的控件。
878 * @usage `<check checked="1">This is a check-box</check>`
879 */
880class SOUI_EXP SCheckBox : public SWindow {
881 DEF_SOBJECT(SWindow, L"check") // 定义对象类型为 "check"
882
883 enum
884 {
885 CheckBoxSpacing = 4, // 复选框与文本之间的默认间距
886 };
887
888 public:
889 /**
890 * @brief 构造函数
891 * @details 初始化复选框控件。
892 */
893 SCheckBox();
894
895 protected:
896 /**
897 * @brief 状态图片资源
898 * @details 用于绘制复选框的不同状态(如选中、未选中等)。
899 */
901
902 /**
903 * @brief 焦点状态资源
904 * @details 当复选框获得焦点时使用的皮肤资源。
905 */
907
908 /**
909 * @brief 获取复选框矩形区域
910 * @return 返回复选框的显示位置矩形 (CRect)。
911 */
912 CRect GetCheckRect();
913
914 /**
915 * @brief 测量内容所需的大小
916 * @param wid 父容器宽度
917 * @param hei 父容器高度
918 * @return 返回控件所需的内容大小 (SIZE)。
919 */
920 SIZE MeasureContent(int wid, int hei) override;
921
922 /**
923 * @brief 获取文本显示区域的大小
924 * @param pRect 输出参数,表示文本显示区域的矩形。
925 */
926 virtual void GetTextRect(LPRECT pRect);
927
928 /**
929 * @brief 判断状态改变时是否需要重绘控件
930 * @return TRUE 表示需要重绘,FALSE 表示不需要重绘。
931 */
933 {
934 return TRUE; // 默认情况下,状态改变时需要重绘
935 }
936
937 /**
938 * @brief 获取对话框代码
939 * @return 返回值为 UINT 类型,表示对话框代码。
940 * @details 返回 SC_WANTCHARS 表示控件需要处理字符消息。
941 */
942 virtual UINT WINAPI OnGetDlgCode() const
943 {
944 return SC_WANTCHARS;
945 }
946
947 /**
948 * @brief 绘制焦点样式
949 * @param pRT 绘制设备句柄 (IRenderTarget*)。
950 * @details 当控件获得焦点时调用此方法绘制焦点样式。
951 */
952 virtual void DrawFocus(IRenderTarget *pRT);
953
954 /**
955 * @brief 处理颜色化事件
956 * @param cr 颜色值 (COLORREF)。
957 * @details 当控件的颜色发生变化时调用此方法。
958 */
959 virtual void OnColorize(COLORREF cr);
960
961 /**
962 * @brief 处理缩放变化事件
963 * @param scale 缩放比例 (int)。
964 * @details 当控件的缩放比例发生变化时调用此方法。
965 */
966 virtual void OnScaleChanged(int scale);
967
968 /**
969 * @brief 处理鼠标左键释放事件
970 * @param nFlags 标志位 (UINT)。
971 * @param pt 鼠标位置 (CPoint)。
972 * @details 当用户释放鼠标左键时调用此方法。
973 */
974 void OnLButtonUp(UINT nFlags, CPoint pt);
975
976 /**
977 * @brief 处理按键按下事件
978 * @param nChar 字符 (UINT)。
979 * @param nRepCnt 重复次数 (UINT)。
980 * @param nFlags 标志位 (UINT)。
981 * @details 当用户按下键盘按键时调用此方法。
982 */
983 void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
984
985 /**
986 * @brief 处理绘制事件
987 * @param pRT 绘制设备句柄 (IRenderTarget*)。
988 * @details 负责绘制控件的外观。
989 */
990 void OnPaint(IRenderTarget *pRT);
991
992 /**
993 * @brief 处理自定义属性 "checked"
994 * @param strValue 属性值 (SStringW)。
995 * @param bLoading 是否正在加载 (BOOL)。
996 * @return 成功返回 S_OK,失败返回 HRESULT 错误码。
997 * @details 用于解析和设置 "checked" 属性。
998 */
999 HRESULT OnAttrCheck(const SStringW &strValue, BOOL bLoading);
1000
1001 /**
1002 * @brief 定义控件的属性集合
1003 */
1004 SOUI_ATTRS_BEGIN()
1005 ATTR_SKIN(L"skin", m_pSkin, FALSE) // 定义皮肤资源属性
1006 ATTR_SKIN(L"focusSkin", m_pFocusSkin, FALSE) // 定义焦点皮肤资源属性
1007 ATTR_CUSTOM(L"checked", OnAttrCheck) // 定义自定义属性 "checked"
1008 SOUI_ATTRS_END()
1009
1010 /**
1011 * @brief 定义控件的消息映射
1012 */
1013 SOUI_MSG_MAP_BEGIN()
1014 MSG_WM_PAINT_EX(OnPaint) // 绑定绘制消息
1015 MSG_WM_LBUTTONDBLCLK(OnLButtonDown) // 绑定鼠标左键双击消息
1016 MSG_WM_LBUTTONUP(OnLButtonUp) // 绑定鼠标左键释放消息
1017 MSG_WM_KEYDOWN(OnKeyDown) // 绑定按键按下消息
1018 SOUI_MSG_MAP_END()
1019};
1020
1021/**
1022 * @class SIconWnd
1023 * @brief 图标控件
1024 * @details 图标控件。
1025 * @usage `<icon src="icon:16" />`
1026 */
1027class SOUI_EXP SIconWnd : public TWindowProxy<IIconWnd> {
1028 DEF_SOBJECT(SWindow, L"icon")
1029
1030 public:
1031 /**
1032 * @brief 构造函数
1033 */
1034 SIconWnd();
1035
1036 /**
1037 * @brief 析构函数
1038 */
1039 virtual ~SIconWnd();
1040
1041 /**
1042 * @brief 设置图标
1043 * @param hIcon 图标句柄
1044 */
1045 STDMETHOD_(void, SetIcon)(THIS_ HICON hIcon) OVERRIDE;
1046
1047 protected:
1048 /**
1049 * @brief 测量内容大小
1050 * @param wid 父容器宽度
1051 * @param hei 父容器高度
1052 * @return 内容大小
1053 */
1054 SIZE MeasureContent(int wid, int hei) override;
1055
1056 /**
1057 * @brief 绘制控件
1058 * @param pRT 绘制设备句柄
1059 */
1060 void OnPaint(IRenderTarget *pRT);
1061
1062 SOUI_MSG_MAP_BEGIN()
1063 MSG_WM_PAINT_EX(OnPaint)
1064 SOUI_MSG_MAP_END()
1065
1066 public:
1067 SOUI_ATTRS_BEGIN()
1068 ATTR_CUSTOM(L"src", OnAttrIcon)
1069 SOUI_ATTRS_END()
1070 protected:
1071 HRESULT OnAttrIcon(const SStringW &value, BOOL bLoading);
1072
1073 void OnScaleChanged(int scale) override;
1074
1075 protected:
1076 SStringW m_strIconSrc;
1077 HICON m_theIcon; /**< 图标资源句柄 */
1078};
1079
1080/**
1081 * @class SRadioBox
1082 * @brief 单选框控件类
1083 * @details 用于实现单选框功能的控件。
1084 * @usage `<radio checked="1">This is a check-box</radio>`
1085 */
1086class SOUI_EXP SRadioBox : public SWindow {
1087 DEF_SOBJECT(SWindow, L"radio") // 定义对象类型为 "radio"
1088
1089 public:
1090 /**
1091 * @brief 构造函数
1092 * @details 初始化单选框控件。
1093 */
1094 SRadioBox();
1095
1096 protected:
1097 /**
1098 * @brief 获取单选框显示位置的矩形区域
1099 * @return 返回单选框的显示位置矩形 (CRect)。
1100 */
1101 CRect GetRadioRect();
1102
1103 /**
1104 * @brief 获取文本显示区域的大小
1105 * @param pRect 输出参数,表示文本显示区域的矩形。
1106 */
1107 virtual void GetTextRect(LPRECT pRect);
1108
1109 /**
1110 * @brief 测量内容所需的大小
1111 * @param wid 父容器宽度
1112 * @param hei 父容器高度
1113 * @return 返回控件所需的内容大小 (SIZE)。
1114 */
1115 SIZE MeasureContent(int wid, int hei) OVERRIDE;
1116
1117 /**
1118 * @brief 获取对话框代码
1119 * @return 返回值为 UINT 类型,表示对话框代码。
1120 * @details 返回 0 表示不处理特定消息。
1121 */
1122 STDMETHOD_(UINT, OnGetDlgCode)(THIS) SCONST OVERRIDE
1123 {
1124 return 0;
1125 }
1126
1127 /**
1128 * @brief 判断是否自动将相同名称的单选按钮添加到同一组中
1129 * @return TRUE 表示自动分组,FALSE 表示不自动分组。
1130 */
1131 STDMETHOD_(BOOL, IsSiblingsAutoGroupped)(THIS) SCONST OVERRIDE
1132 {
1133 return TRUE; // 默认情况下,相同名称的单选按钮会自动分组
1134 }
1135
1136 /**
1137 * @brief 判断状态改变时是否需要重绘控件
1138 * @return TRUE 表示需要重绘,FALSE 表示不需要重绘。
1139 */
1140 virtual BOOL NeedRedrawWhenStateChange();
1141
1142 /**
1143 * @brief 绘制焦点样式
1144 * @param pRT 绘制设备句柄 (IRenderTarget*)。
1145 * @details 当控件获得焦点时调用此方法绘制焦点样式。
1146 */
1147 virtual void DrawFocus(IRenderTarget *pRT);
1148
1149 /**
1150 * @brief 获取当前组中被选中的兄弟控件
1151 * @return 返回指向被选中兄弟控件的指针 (SWindow*),如果没有则返回 NULL。
1152 */
1154
1155 /**
1156 * @brief 处理状态变化事件
1157 * @param dwOldState 原状态 (DWORD)。
1158 * @param dwNewState 新状态 (DWORD)。
1159 */
1160 virtual void OnStateChanging(DWORD dwOldState, DWORD dwNewState);
1161
1162 /**
1163 * @brief 处理颜色化事件
1164 * @param cr 颜色值 (COLORREF)。
1165 */
1166 virtual void OnColorize(COLORREF cr);
1167
1168 /**
1169 * @brief 处理缩放变化事件
1170 * @param nScale 缩放比例 (int)。
1171 */
1172 virtual void OnScaleChanged(int nScale);
1173
1174 protected:
1175 /**
1176 * @brief 处理焦点改变事件
1177 * @param wndOld 原窗口句柄 (SWND)。
1178 * @param reason 焦点改变原因 (SFocusManager::FocusChangeReason)。
1179 */
1180 void OnSetFocus(SWND wndOld, SFocusManager::FocusChangeReason reason);
1181
1182 /**
1183 * @brief 处理鼠标左键释放事件
1184 * @param nFlags 标志位 (UINT)。
1185 * @param pt 鼠标位置 (CPoint)。
1186 */
1187 void OnLButtonUp(UINT nFlags, CPoint pt);
1188
1189 /**
1190 * @brief 绘制控件
1191 * @param pRT 绘制设备句柄 (IRenderTarget*)。
1192 */
1193 void OnPaint(IRenderTarget *pRT);
1194
1195 /**
1196 * @brief 处理自定义属性 "checked"
1197 * @param strValue 属性值 (SStringW)。
1198 * @param bLoading 是否正在加载 (BOOL)。
1199 * @return 成功返回 S_OK,失败返回 HRESULT 错误码。
1200 */
1201 HRESULT OnAttrCheck(const SStringW &strValue, BOOL bLoading);
1202
1203 /**
1204 * @brief 定义控件的属性集合
1205 */
1206 SOUI_ATTRS_BEGIN()
1207 ATTR_SKIN(L"skin", m_pSkin, FALSE) // 定义皮肤资源属性
1208 ATTR_SKIN(L"focusSkin", m_pFocusSkin, FALSE) // 定义焦点皮肤资源属性
1209 ATTR_CUSTOM(L"checked", OnAttrCheck) // 定义自定义属性 "checked"
1210 ATTR_ENUM_BEGIN(L"iconAlign", UINT, TRUE) // 定义图标对齐方式属性
1211 ATTR_ENUM_VALUE(L"left", SwndStyle::Align_Left) // 左对齐
1212 ATTR_ENUM_VALUE(L"center", SwndStyle::Align_Center) // 居中对齐
1213 ATTR_ENUM_VALUE(L"right", SwndStyle::Align_Right) // 右对齐
1214 ATTR_ENUM_END(m_uIconAlign)
1215 ATTR_ENUM_BEGIN(L"iconValign", UINT, TRUE) // 定义图标垂直对齐方式属性
1216 ATTR_ENUM_VALUE(L"top", SwndStyle::VAlign_Top) // 顶部对齐
1217 ATTR_ENUM_VALUE(L"middle", SwndStyle::VAlign_Middle) // 中间对齐
1218 ATTR_ENUM_VALUE(L"bottom", SwndStyle::VAlign_Bottom) // 底部对齐
1219 ATTR_ENUM_END(m_uIconVAlign)
1220 ATTR_INT(L"sep", m_nRadioBoxSpacing, TRUE) // 定义间距属性
1221 SOUI_ATTRS_END()
1222
1223 /**
1224 * @brief 定义控件的消息映射
1225 */
1226 SOUI_MSG_MAP_BEGIN()
1227 MSG_WM_PAINT_EX(OnPaint) // 绑定绘制消息
1228 MSG_WM_LBUTTONUP(OnLButtonUp) // 绑定鼠标左键释放消息
1229 MSG_WM_SETFOCUS_EX2(OnSetFocus) // 绑定焦点改变消息
1230 SOUI_MSG_MAP_END()
1231
1232 protected:
1233 /**
1234 * @brief 皮肤资源
1235 */
1237
1238 /**
1239 * @brief 焦点皮肤资源
1240 */
1242
1243 /**
1244 * @brief 图标水平对齐方式
1245 */
1247
1248 /**
1249 * @brief 图标垂直对齐方式
1250 */
1252
1253 /**
1254 * @brief 单选框与文本之间的间距
1255 */
1257};
1258
1259/**
1260 * @class SRadioGroup
1261 * @brief 单选按钮组控件
1262 * @details 用于管理一组单选按钮,确保同一组中的单选按钮互斥。
1263 */
1264class SOUI_EXP SRadioGroup : public SWindow {
1265 DEF_SOBJECT(SWindow, L"radioGroup")
1266
1267 public:
1268 /**
1269 * @brief 构造函数
1270 */
1271 SRadioGroup();
1272
1273 /**
1274 * @brief 检查指定ID的单选按钮
1275 * @param nID 单选按钮ID
1276 * @return 成功--TRUE 失败--FALSE
1277 */
1278 BOOL Check(int nID);
1279
1280 /**
1281 * @brief 检查指定名称的单选按钮
1282 * @param pszName 单选按钮名称
1283 * @return 成功--TRUE 失败--FALSE
1284 */
1285 BOOL Check(LPCTSTR pszName);
1286
1287 /**
1288 * @brief 清除所有选中的单选按钮
1289 * @return 成功--TRUE 失败--FALSE
1290 */
1291 BOOL ClearCheck();
1292
1293 protected:
1294 /**
1295 * @brief 触发事件
1296 * @param evt 事件参数
1297 * @return 成功--TRUE 失败--FALSE
1298 */
1299 STDMETHOD_(BOOL, FireEvent)(THIS_ IEvtArgs *evt) OVERRIDE;
1300
1301 /**
1302 * @brief 在插入子控件后处理
1303 * @param pChild 子控件指针
1304 */
1305 virtual void OnAfterInsertChild(SWindow *pChild);
1306
1307 /**
1308 * @brief 在移除子控件前处理
1309 * @param pChild 子控件指针
1310 */
1311 virtual void OnBeforeRemoveChild(SWindow *pChild);
1312};
1313
1314/**
1315 * @class SToggle
1316 * @brief Toggle控件
1317 * @details Toggle控件,继承自SCheckBox,用于实现开关效果。
1318 */
1319class SOUI_EXP SToggle : public SCheckBox {
1320 DEF_SOBJECT(SCheckBox, L"toggle")
1321
1322 public:
1323 /**
1324 * @brief 构造函数
1325 */
1326 SToggle();
1327
1328 /**
1329 * @brief 设置Toggle属性
1330 * @param bToggle 是否启用Toggle特效
1331 * @param bUpdate 是否更新,默认值TRUE
1332 */
1333 void SetToggle(BOOL bToggle, BOOL bUpdate = TRUE);
1334
1335 /**
1336 * @brief 获取Toggle属性
1337 * @return 返回值BOOL
1338 * @details 获取Toggle属性,主要用于获取是否启用Toggle特效
1339 */
1340 BOOL GetToggle();
1341
1342 protected:
1343 /**
1344 * @brief 测量内容大小
1345 * @param nParentWid 父容器宽度
1346 * @param nParentHei 父容器高度
1347 * @return 内容大小
1348 */
1349 SIZE MeasureContent(int nParentWid, int nParentHei) override;
1350
1351 /**
1352 * @brief 状态改变是否需要重画
1353 * @return 需要重画--TRUE
1354 */
1356 {
1357 return TRUE;
1358 }
1359
1360 protected:
1361 /**
1362 * @brief 绘制控件
1363 * @param pRT 绘制设备句柄
1364 */
1365 void OnPaint(IRenderTarget *pRT);
1366
1367 SOUI_MSG_MAP_BEGIN()
1368 MSG_WM_PAINT_EX(OnPaint)
1369 SOUI_MSG_MAP_END()
1370};
1371
1372/**
1373 * @class SGroup
1374 * @brief 组控件
1375 * @details 组控件,用于将多个控件分组显示。
1376 * @usage `<group colorLine1="#b8d5e2" colorLine2="#999999">group text</group>`
1377 */
1378class SOUI_EXP SGroup : public SWindow {
1379 DEF_SOBJECT(SWindow, L"group")
1380
1381 public:
1382 /**
1383 * @brief 构造函数
1384 */
1385 SGroup();
1386
1387 protected:
1388 /**
1389 * @brief 获取子控件布局矩形
1390 * @param prc 输出矩形
1391 */
1392 STDMETHOD_(void, GetChildrenLayoutRect)(THIS_ RECT *prc) SCONST OVERRIDE;
1393
1394 /**
1395 * @brief 获取预期大小
1396 * @param psz 输出大小
1397 * @param wid 父容器宽度
1398 * @param hei 父容器高度
1399 */
1400 STDMETHOD_(void, GetDesiredSize)(THIS_ SIZE *psz, int wid, int hei) OVERRIDE;
1401
1402 /**
1403 * @brief 绘制控件
1404 * @param pRT 绘制设备句柄
1405 */
1406 void OnPaint(IRenderTarget *pRT);
1407
1408 protected:
1409 /**
1410 * @brief group 3D显示使用的两种颜色
1411 */
1412 COLORREF m_crLine1, m_crLine2;
1413
1414 /**
1415 * @brief 圆角半径
1416 */
1418
1419 /**
1420 * @brief 头部高度
1421 */
1423
1424 SOUI_MSG_MAP_BEGIN()
1425 MSG_WM_PAINT_EX(OnPaint)
1426 SOUI_MSG_MAP_END()
1427
1428 SOUI_ATTRS_BEGIN()
1429 ATTR_COLOR(L"colorLine1", m_crLine1, FALSE)
1430 ATTR_COLOR(L"colorLine2", m_crLine2, FALSE)
1431 ATTR_LAYOUTSIZE(L"round", m_nRound, FALSE)
1432 ATTR_LAYOUTSIZE(L"headerHeight", m_nHeaderHeight, TRUE)
1433 SOUI_ATTRS_END()
1434};
1435
1436SNSEND
1437
1438#endif // __SCMNCTRL__H__
Accelerator management module.
Focus management module for DUI windows.
SOUI基础DUI窗口模块
int m_nSpeed
速度
Definition SCmnCtrl.h:632
SAnimateImgWnd()
构造函数
Definition SCmnCtrl.cpp:727
BOOL WINAPI IsPlaying() SCONST
判断动画运行状态
Definition SCmnCtrl.h:554
BOOL m_bPlaying
是否运行中
Definition SCmnCtrl.h:647
int m_nRepeat
播放循环次数,-1代表无限循环
Definition SCmnCtrl.h:657
virtual ~SAnimateImgWnd()
析构函数
Definition SCmnCtrl.h:536
int m_iCurFrame
当前帧
Definition SCmnCtrl.h:637
SAutoRefPtr< ISkinObj > m_pSkin
动画图片
Definition SCmnCtrl.h:627
BOOL m_bAutoStart
是否自动启动
Definition SCmnCtrl.h:642
int m_iRepeat
当前播放循环轮次
Definition SCmnCtrl.h:662
int m_iTimeFrame
OnNextFrame的执行次数
Definition SCmnCtrl.h:652
Smart pointer class for managing COM-style reference-counted objects.
BOOL m_bDisableAccelIfInvisible
禁用不可见时的加速键
Definition SCmnCtrl.h:341
virtual BOOL NeedRedrawWhenStateChange()
状态变化需要重画
Definition SCmnCtrl.h:211
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
处理按键按下事件
Definition SCmnCtrl.cpp:418
virtual UINT WINAPI OnGetDlgCode() const
获取编码
Definition SCmnCtrl.h:220
BOOL OnEraseBkgnd(IRenderTarget *pRT)
处理擦除背景事件
Definition SCmnCtrl.h:294
void OnDestroy()
处理销毁事件
Definition SCmnCtrl.cpp:479
void OnSize(UINT nType, CSize size)
处理大小改变事件
Definition SCmnCtrl.cpp:522
BYTE m_nAniStep
alpha for animate step
Definition SCmnCtrl.h:336
BOOL m_bAnimate
动画标志
Definition SCmnCtrl.h:326
HRESULT OnAttrAccel(SStringW strAccel, BOOL bLoading)
处理自定义属性accel
Definition SCmnCtrl.cpp:490
DWORD m_accel
加速键
Definition SCmnCtrl.h:321
SButton()
构造函数
Definition SCmnCtrl.cpp:377
void OnPaint(IRenderTarget *pRT)
绘制控件
Definition SCmnCtrl.cpp:388
void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
处理按键释放事件
Definition SCmnCtrl.cpp:430
WORD m_byAlphaAni
动画状态
Definition SCmnCtrl.h:331
void OnLButtonUp(UINT nFlags, CPoint pt)
处理鼠标左键释放事件
CRect GetCheckRect()
获取复选框矩形区域
virtual UINT WINAPI OnGetDlgCode() const
获取对话框代码
Definition SCmnCtrl.h:942
SCheckBox()
构造函数
virtual BOOL NeedRedrawWhenStateChange()
判断状态改变时是否需要重绘控件
Definition SCmnCtrl.h:932
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
处理按键按下事件
void OnPaint(IRenderTarget *pRT)
处理绘制事件
SAutoRefPtr< ISkinObj > m_pSkin
状态图片资源
Definition SCmnCtrl.h:900
SAutoRefPtr< ISkinObj > m_pFocusSkin
焦点状态资源
Definition SCmnCtrl.h:906
HRESULT OnAttrCheck(const SStringW &strValue, BOOL bLoading)
处理自定义属性 "checked"
FocusChangeReason
Reason for focus change.
SGroup()
构造函数
SLayoutSize m_nRound
圆角半径
Definition SCmnCtrl.h:1417
void GetDesiredSize(SIZE *psz, int wid, int hei) OVERRIDE
获取预期大小
SLayoutSize m_nHeaderHeight
头部高度
Definition SCmnCtrl.h:1422
void OnPaint(IRenderTarget *pRT)
绘制控件
void GetChildrenLayoutRect(RECT *prc) SCONST OVERRIDE
获取子控件布局矩形
COLORREF m_crLine1
group 3D显示使用的两种颜色
Definition SCmnCtrl.h:1412
HICON m_theIcon
Definition SCmnCtrl.h:1077
SIconWnd()
构造函数
void OnPaint(IRenderTarget *pRT)
绘制控件
void SetIcon(HICON hIcon) OVERRIDE
设置图标
SImageButton()
构造函数
Definition SCmnCtrl.cpp:554
BOOL m_bManaged
是否要自动释放当前的m_pSkin对象
Definition SCmnCtrl.h:471
SImageWnd()
构造函数
Definition SCmnCtrl.cpp:571
SAutoRefPtr< IBitmapS > m_pImg
使用代码设定的图片
Definition SCmnCtrl.h:486
int m_iIcon
绘制状态索引
Definition SCmnCtrl.h:476
BOOL SetIcon(int nSubID) OVERRIDE
设置图标
Definition SCmnCtrl.cpp:685
void OnPaint(IRenderTarget *pRT)
绘制控件
Definition SCmnCtrl.cpp:591
FilterLevel m_fl
绘制图片的放大精度
Definition SCmnCtrl.h:491
bool m_bKeepAspect
保持纵横比
Definition SCmnCtrl.h:496
void SetImage(IBitmapS *pBitmap, FilterLevel fl=kNone_FilterLevel) OVERRIDE
设置绘制图片
Definition SCmnCtrl.cpp:673
SAutoRefPtr< ISkinObj > m_pSkin
ISkinObj对象
Definition SCmnCtrl.h:481
BOOL SetSkin(ISkinObj *pSkin, int iFrame=0, BOOL bAutoFree=TRUE) OVERRIDE
设置skin
Definition SCmnCtrl.cpp:636
int m_iTile
绘制是否平铺, 0–位伸(默认),1–不变常规绘制, 2–平铺
Definition SCmnCtrl.h:466
ISkinObj * GetSkin() OVERRIDE
获取资源
Definition SCmnCtrl.cpp:722
IBitmapS * GetImage() OVERRIDE
获取当前设置的IBitmapS对象
Definition SCmnCtrl.cpp:680
布局大小类
Definition SLayoutSize.h:10
HRMODE
线条模式枚举
Definition SCmnCtrl.h:845
int m_nLineStyle
线条样式
Definition SCmnCtrl.h:829
int m_nLineSize
线条大小
Definition SCmnCtrl.h:834
SLine()
构造函数
COLORREF m_crLine
线条颜色
Definition SCmnCtrl.h:839
void OnInitFinished(IXmlNode *xmlNode) OVERRIDE
Definition Sobject.hpp:248
SAutoRefPtr< ISkinObj > m_pSkinPos
前景资源
Definition SCmnCtrl.h:786
SProgress()
构造函数
Definition SCmnCtrl.cpp:869
void OnPaint(IRenderTarget *pRT)
绘制控件
Definition SCmnCtrl.cpp:905
BOOL SetValue(int nValue) OVERRIDE
设置进度条进度值
Definition SCmnCtrl.cpp:949
int m_nValue
进度值
Definition SCmnCtrl.h:766
int m_nMaxValue
进度最大值
Definition SCmnCtrl.h:761
BOOL m_bShowPercent
是否显示百分比
Definition SCmnCtrl.h:771
BOOL IsVertical() SCONST OVERRIDE
判断进度条是否为竖直状态
Definition SCmnCtrl.h:714
int m_nMinValue
进度最小值
Definition SCmnCtrl.h:756
SAutoRefPtr< ISkinObj > m_pSkinBg
背景资源
Definition SCmnCtrl.h:781
BOOL m_bVertical
是否竖直状态
Definition SCmnCtrl.h:776
int GetValue() SCONST OVERRIDE
获取进度值
Definition SCmnCtrl.h:691
int OnCreate(void *)
处理创建事件
Definition SCmnCtrl.cpp:940
void OnLButtonUp(UINT nFlags, CPoint pt)
处理鼠标左键释放事件
SAutoRefPtr< ISkinObj > m_pFocusSkin
焦点皮肤资源
Definition SCmnCtrl.h:1241
SRadioBox()
构造函数
BOOL IsSiblingsAutoGroupped() SCONST OVERRIDE
判断是否自动将相同名称的单选按钮添加到同一组中
Definition SCmnCtrl.h:1131
void OnSetFocus(SWND wndOld, SFocusManager::FocusChangeReason reason)
处理焦点改变事件
HRESULT OnAttrCheck(const SStringW &strValue, BOOL bLoading)
处理自定义属性 "checked"
UINT OnGetDlgCode() SCONST OVERRIDE
获取对话框代码
Definition SCmnCtrl.h:1122
SAutoRefPtr< ISkinObj > m_pSkin
定义控件的消息映射
Definition SCmnCtrl.h:1236
UINT m_uIconVAlign
图标垂直对齐方式
Definition SCmnCtrl.h:1251
CRect GetRadioRect()
获取单选框显示位置的矩形区域
int m_nRadioBoxSpacing
单选框与文本之间的间距
Definition SCmnCtrl.h:1256
UINT m_uIconAlign
图标水平对齐方式
Definition SCmnCtrl.h:1246
void OnPaint(IRenderTarget *pRT)
绘制控件
BOOL ClearCheck()
清除所有选中的单选按钮
SRadioGroup()
构造函数
BOOL FireEvent(IEvtArgs *evt) OVERRIDE
触发事件
BOOL Check(int nID)
检查指定ID的单选按钮
virtual void OnDrawLine(IRenderTarget *pRT, LPCTSTR pszBuf, int iBegin, int cchText, LPRECT pRect, UINT uFormat)
绘制单行文本
Definition SCmnCtrl.cpp:55
SStatic()
构造函数
Definition SCmnCtrl.cpp:14
bool m_bWordbreak
是否自动换行
Definition SCmnCtrl.h:87
void DrawMultiLine(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText, LPRECT pRect, UINT uFormat)
绘制多行文本
Definition SCmnCtrl.cpp:134
int m_nLineInter
行间距
Definition SCmnCtrl.h:82
virtual SIZE OnMeasureText(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText)
测量文本大小
Definition SCmnCtrl.cpp:252
A class representing an ASCII string.
Definition sstringw.h:96
BOOL GetToggle()
获取Toggle属性
void SetToggle(BOOL bToggle, BOOL bUpdate=TRUE)
设置Toggle属性
SToggle()
构造函数
virtual BOOL NeedRedrawWhenStateChange()
状态改变是否需要重画
Definition SCmnCtrl.h:1355
Base class for SOUI DUI windows.
Definition SWnd.h:286
virtual void OnContainerChanged(ISwndContainer *pOldContainer, ISwndContainer *pNewContainer)
Called when the container of the window changes.
Definition Swnd.cpp:3407
void OnMouseMove(UINT nFlags, CPoint pt)
Handles the mouse move event.
Definition Swnd.cpp:2131
void OnMouseHover(UINT nFlags, CPoint ptPos)
Handles the mouse hover event.
Definition Swnd.cpp:2135
void OnDestroy()
Handles the destruction of the window.
Definition Swnd.cpp:1701
void OnPaint(IRenderTarget *pRT)
Handles the painting of the window.
Definition Swnd.cpp:1785
virtual SIZE MeasureContent(int nParentWid, int nParentHei)
Measures the size of the content within the window.
Definition Swnd.cpp:1925
virtual void OnScaleChanged(int scale)
Called when the scale of the window changes.
Definition Swnd.cpp:3271
int OnCreate(LPVOID)
Handles the creation of the window.
Definition Swnd.cpp:1654
virtual BOOL NeedRedrawWhenStateChange()
Determine if redraw is needed on state change.
Definition Swnd.cpp:1086
void OnSize(UINT nType, CSize size)
Handles the resizing of the window.
Definition Swnd.cpp:2844
void OnLButtonUp(UINT nFlags, CPoint pt)
Handles the left mouse button up event.
Definition Swnd.cpp:2105
SWindow()
Constructor.
Definition Swnd.cpp:104
virtual void DrawFocus(IRenderTarget *pRT)
Draw focus state.
Definition Swnd.cpp:1973
void OnLButtonDown(UINT nFlags, CPoint pt)
Handles the left mouse button down event.
Definition Swnd.cpp:2092
virtual void OnBeforeRemoveChild(SWindow *pChild)
Called before a child window is removed from this window.
Definition Swnd.cpp:3391
virtual void OnAfterInsertChild(SWindow *pChild)
Called after a child window has been inserted into this window.
Definition Swnd.cpp:3395
virtual void GetTextRect(LPRECT pRect)
Calculate text display rectangle.
Definition Swnd.cpp:1961
virtual void DrawText(IRenderTarget *pRT, LPCTSTR pszBuf, int cchText, LPRECT pRect, UINT uFormat)
Draw text content.
Definition Swnd.cpp:1968
void OnShowWindow(BOOL bShow, UINT nStatus)
Handles showing or hiding the window.
Definition Swnd.cpp:2001
virtual void OnColorize(COLORREF cr)
Adjusts the color tone of the window.
Definition Swnd.cpp:3154
virtual BOOL OnSetCursor(const CPoint &pt)
Sets the cursor when the mouse hovers over the window.
Definition Swnd.cpp:429
virtual SWindow * GetSelectedSiblingInGroup()
Get selected sibling in group.
Definition SWnd.h:1598
virtual void OnStateChanging(DWORD dwOldState, DWORD dwNewState)
Called before the state of the window changes.
Definition Swnd.cpp:2997
BOOL InitFromXml(IXmlNode *pNode) OVERRIDE
Initializes the window from an XML node.
Definition Swnd.cpp:946
void OnSetFocus(SWND wndOld)
Handles gaining focus.
Definition Swnd.cpp:2265
virtual void OnStateChanged(DWORD dwOldState, DWORD dwNewState)
Called after the state of the window changes.
Definition Swnd.cpp:3001
Manages the style attributes of SOUI windows.
Definition SWndStyle.h:28
Interface for an accelerator key.
Interface for handling accelerator key presses.
Bitmap object interface.
Definition SRender-i.h:420
Interface for rendering target objects.
Definition SRender-i.h:1440
Interface for Skin Objects.
Definition SSkinobj-i.h:29
SOUI Window Container Interface.
时间轴处理接口
Interface for XML nodes.
Definition sxml-i.h:128