博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wxWidgets第九课 wx绘图工具
阅读量:5989 次
发布时间:2019-06-20

本文共 2143 字,大约阅读时间需要 7 分钟。

画笔画刷说明

        wxPen作为画笔渲染轮廓线,wxBrush作为画刷渲染图形的填充颜色。当画笔和画刷同时使用的情况下,可以渲染轮廓颜色和填充颜色不一样的图形。wxPen构造函数的第一个参数是颜色,第二个参数是画笔的厚度。wx针对画笔和画刷提供了许多常见的颜色宏定义,避免了需要手动设置RGB分量的情况,大大减轻开发者的负担。例如画笔颜色wxBLACK_PEN wxGREEN_PEN wxWHITE_PEN wxBLUE_PEN等,画刷颜色wxBLACK_BRUSH wxGREEN_BRUSH wxWHITE_BRUSH wxBLUE_BRUSH等

已有例子

wxBufferedPaintDC dc(this);

dc.SetBrush(wxBrush(wxColour(255, 255, 255)));

现有例子

wxBufferedPaintDC dc(this);

dc.SetBrush(*wxWHITE_BRUSH);


注意

dc.SetBrush(wxNullBrush);

dc.SetPen(wxNullPen);

上述两行代码能够清除当前设置的画笔和画刷的颜色,避免影响到后续的渲染


代码

#include "wx/wx.h"


空心矩形wxPen

void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event )

{

wxClientDC dc(this);

wxPen pen(*wxRED,1);

dc.SetPen(pen);

dc.DrawRectangle(0, 0, 200, 300);

dc.SetPen(wxNullPen);

}


实心矩形wxBrush

void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event )

{

wxClientDC dc(this);

wxColor strokeColor(0, 255, 255, 255);

wxColor fillColor(0, 0, 255, 255);

wxBrush brush(fillColor);

wxPen pen(strokeColor);

dc.SetPen(pen);

dc.SetBrush(brush);

dc.DrawRectangle(0, 0, 200, 300);

dc.SetBrush(wxNullBrush);

dc.SetPen(wxNullPen);

}


可以设置dc.SetBrush(*wxTRANSPARENT_BRUSH);透明画刷来实现,渲染空心轮廓线


DrawEllipse 渲染椭圆说明

#include "wx/dcclient.h"


wxPaintDC dc(this);

wxColor color(15, 57, 121);

wxBrush brush(color);

dc.SetBrush(brush);

dc.DrawEllipse(0, 0, width, height);

dc.SetBrush(wxNullBrush);


DrawEllipse渲染椭圆,该椭圆内切于矩形,当width等于height的时候,渲染圆形,

第一和第二参数是矩形的左上角的X轴和Y轴坐标,第三和第四参数是矩形

的长和宽



DrawPoint 渲染点说明

渲染点使用画笔wxPen,因此认为渲染点的尺寸大小能够通过修改画笔的宽度来修改,实际上渲染点的尺寸大小始终是1个像素点,所以会造


成以下的现象:仅仅渲染一个点,在屏幕上是无法通过肉眼看到的

实例代码:关联渲染事件OnPaint,在屏幕上(100,100)位置渲染点

void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event )

{

wxClientDC dc(this);

wxPen pen(*wxBLACK, 5); 

dc.SetPen(pen);

dc.DrawPoint(100, 100);

dc.SetPen(wxNullPen);

}


实例代码:验证说明确实已经进行了渲染并且肉眼可以看见,可以连续渲染多个相邻的点,形成直线。关联鼠标拖动事件OnMotion

void CFlightInstrumentPanel::OnMotion( wxMouseEvent& event )

{

if ( event.Dragging())

{

wxClientDC dc(this);

wxPen pen(*wxBLACK, 5); 

dc.SetPen(pen);

int x = event.GetPosition().x;

int y = event.GetPosition().y;

dc.DrawPoint(x, y);

dc.SetPen(wxNullPen);

}

}


结论:

为了能够渲染一个足够大的点,可以使用渲染圆形的方式

     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1955036,如需转载请自行联系原作者

你可能感兴趣的文章
python大佬养成计划----HTML网页设计(序列)
查看>>
EOS Asia & 思否区块链达成战略合作
查看>>
文本分析——分词、统计词频、词云
查看>>
网站安全:你面临2个至关重要的挑战!
查看>>
ES6学习笔记2---对象的扩展
查看>>
零 bug 策略
查看>>
阿里数据中台七年演化史——行在口述干货
查看>>
中国学术力量不容小觑,首届华人带头的国际分布式人工智能学术会议将于北京召开 ...
查看>>
东南亚科技公司BLUE Mobile完成C轮融资,蚂蚁金服领投、愉悦资本跟投 ...
查看>>
传统网站维护难,智能化建站平台帮助国际学校一站解决 ...
查看>>
在巴塞罗那,华为挥别昨日 | MWC 2019
查看>>
我们3666人的【阿里Java技术进阶】钉钉大群,又增添新 “成员” 啦~ ...
查看>>
同盾科技与中科实数共建互联网反黑产联合实验室 ...
查看>>
读懂微信:从1.0到7.0版本,一个主流IM社交工具的进化史 ...
查看>>
Flask 教程 第十章:邮件支持
查看>>
C++雾中风景13:volatile解惑
查看>>
绿色版Mysql自动建立my.ini和命令行启动并动态指定datadir路径
查看>>
华为5G手机发布!5G和AI给世界带来什么?
查看>>
SQL Server使用sp_spaceused查看表记录存在不准确的情况
查看>>
网站服务器购买配置选购方案
查看>>