SOUI自定义控件(4)

在上一小节内容里我们已经能正确画出一个拆线图,但是一般来说我们的拆线需要区分不同颜色,很显然个颜色不能在代码里写死,需要我们能通过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>

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值