在上一小节内容里我们已经能正确画出一个拆线图,但是一般来说我们的拆线需要区分不同颜色,很显然个颜色不能在代码里写死,需要我们能通过XML来配置它的颜色。这一小节就界面自定义控件的属性定义。

看看前面的代码我们应该已经知道了,SOUI通过

SOUI_ATTRS_BEGIN()

SOUI_ATTRS_END()

宏来处理我们的自下定义属性。在其内置宏里已经定义了常用的宏比如定义颜色使用ATTR_COLOR,字体 ATTR_FONT等等一系列的宏。具体可以查看SAttrCracker.h这个文件。下面我们通过给控件添加一个设置拆线颜色的属性。

定义一个变量用于保存拆线颜色,我们这里叫colLine,

COLORREF colLine = CLR_INVALID;

然后在属性列表添加属性处理

 //属性列表SOUI_ATTRS_BEGIN()ATTR_COLOR(L"colLine",colLine,TRUE)SOUI_ATTRS_END()

修改OnPaint

void SCharts::OnPaint(IRenderTarget* pRT)
{SPainter painter;BeforePaint(pRT, painter);std::vector<POINT> ptList;std::default_random_engine random((unsigned int)time(NULL));CRect rcClient;GetClientRect(&rcClient);std::uniform_int_distribution<int> dis1(0, rcClient.Height());for (int i = 0; i < 500;i++) {ptList.push_back({ i * 10,dis1(random)});}CalcPoint(ptList);{if (colLine != CLR_INVALID){CAutoRefPtr<IPen> _Pen;pRT->CreatePen(PS_SOLID, colLine, 1, &_Pen);IPen* oldPen;pRT->SelectObject(_Pen, (IRenderObj**)&oldPen);pRT->DrawLines(ptList.data(), ptList.size());pRT->SelectObject(oldPen);}else {pRT->DrawLines(ptList.data(), ptList.size());}}AfterPaint(pRT, painter);
}

修改XML文件配置颜色。

<scharts text="scharts" size="-2,-2" colLine="RGB(255,0,0)"></scharts>

最后运行如上。线色已经变成定义的红色。试试其它颜色。

SOUI自定义控件(4)相关推荐

  1. SOUI自定义控件(1)

    本文内容旨在完成一个供了常规的折线图.柱状图.散点图.饼图.K线图,用于统计的盒形图,用于地理数据可视化的地图.热力图.线图,用于关系数据可视化的关系图.treemap.旭日图,多维数据可视化的平行坐 ...

  2. SOUI自定义控件(2)

    本系列文章基于VS2022+SOUI4,对于SOUI4相对于SOUI3来说主要是添加了导出C接口的能力,对应的代码上也比较多的采用了宏,当然原理上和SOUI3并没有太大差别. 一面来具体实现我们的图表 ...

  3. 开发Eclipse自定义控件

    摘自:http://www.ibm.com/developerworks/cn/opensource/os-eclipcntl/ 我们在开发自定义控件时主要考虑以下问题: 1. 自定义控件的绘制:通常 ...

  4. qt获取当前系统音量值_Qt编写自定义控件50-迷你仪表盘

    一.前言 这个控件取名叫迷你仪表盘,是以为该控件可以缩小到很小很小的区域显示,非常适合小面积区域展示仪表数据使用,还可以手动触摸调节进度,是我个人觉得最漂亮小巧的一个控件.初次看到类似的控件是在一个音 ...

  5. 【iOS】自定义控件入门:可拖动的环形进度

    有时候UIKit的标准控件并不能满足我们的需求,因此我们可以通过自定义控件得到满足我们需求的控件,例如这篇文章将教你如何自定义一个圆形的进度条,并且用户可以通过拖动进度条上的手柄来改变进度值.主要参考 ...

  6. Android自定义控件系列之基础篇

    一.概述 在android开发中很多UI控件往往需要进行定制以满足应用的需要或达到更加的效果,接下来就通过一个系列来介绍自定义控件,这里更多是通过一些案例逐步去学习,本系列有一些典型的应用,掌握好了大 ...

  7. C#自定义控件四简易时钟

    C#自定义控件四简易时钟 效果图: 简易时钟,顾名思义,简单容易,简单到什么程度呢?界面只有数字和指针,甚至连与当前时间都不能匹配!呵呵!就这么简单,学习嘛,从简单开始. 毫无疑问,这里肯定要用到Ti ...

  8. 对做C#自定义控件的一点心得

    近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装这个COM组件,中间遇到很多曲折,研究了一个星期,终于完成了 下面总结一下我做DSOFramer这个自定义控件的注意地方: 1.在创建 ...

  9. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  10. Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

    Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

最新文章

  1. R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图、使用subset函数、使用drop_na函数
  2. centos下保留python2安装python3
  3. What to bring in UK?
  4. TWRP-recovery中文界面安装方法[转]
  5. 藤条生长为字母的动画
  6. Ubuntu上可使用的15个桌面环境
  7. 批量创建用户(基于域)
  8. 第四季-专题19-I2C驱动程序设计
  9. 自动驾驶 10-1: 3D 几何和参考系3D Geometry and Reference Frames
  10. 647.回文字符串 (力扣leetcode) 博主可答疑该问题
  11. YYUC输出联动select标签
  12. 谷歌开源图片压缩算法Guetzli实测体验报告
  13. 如何写一份具有业务价值的分析报告
  14. react仿钉钉流程图-审批工作流
  15. Ruby_01_环境安装
  16. 如何进入设有密码的计算机
  17. Leetcode经典面试题 -- 第3周
  18. 永恒python奇美拉_87级稀有双龙头奇美拉 等到熊猫人时再来抓
  19. 美通企业日报 | 中国空调行业低增长将成常态;可穿戴设备市场价值将超500亿美元...
  20. java调用别人的接口获取数据存到mysql数据库

热门文章

  1. SPDY, WebSocket, WebDAV概念
  2. 时间序列平稳性检验方法汇总
  3. GAN 模式崩溃的理论解释
  4. oracle没有卸载,oracle卸载没有正确卸载怎么办??
  5. Win10预览版已经支持WSL的带GUI的应用
  6. 双光耦开关电源电路图_光耦817应用电路图汇总(PC817光电耦合器/开关电源/TL431)...
  7. java学生选课系统_JAVA | 学生选课系统
  8. H.264码流分析器,雷霄骅版本人修改版
  9. 信杂比公式_信噪比怎么计算
  10. html提示版本过低升级,IE8浏览器提示版本过低怎样升级呢?