wxWidgets第九课 wx绘图工具
畫筆畫刷說明
????????wxPen作為畫筆渲染輪廓線,wxBrush作為畫刷渲染圖形的填充顏色。當(dāng)畫筆和畫刷同時(shí)使用的情況下,可以渲染輪廓顏色和填充顏色不一樣的圖形。wxPen構(gòu)造函數(shù)的第一個(gè)參數(shù)是顏色,第二個(gè)參數(shù)是畫筆的厚度。wx針對(duì)畫筆和畫刷提供了許多常見的顏色宏定義,避免了需要手動(dòng)設(shè)置RGB分量的情況,大大減輕開發(fā)者的負(fù)擔(dān)。例如畫筆顏色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)));
現(xiàn)有例子
wxBufferedPaintDC dc(this);
dc.SetBrush(*wxWHITE_BRUSH);
注意
dc.SetBrush(wxNullBrush);
dc.SetPen(wxNullPen);
上述兩行代碼能夠清除當(dāng)前設(shè)置的畫筆和畫刷的顏色,避免影響到后續(xù)的渲染
代碼
#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);
}
實(shí)心矩形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);
}
可以設(shè)置dc.SetBrush(*wxTRANSPARENT_BRUSH);透明畫刷來實(shí)現(xiàn),渲染空心輪廓線
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渲染橢圓,該橢圓內(nèi)切于矩形,當(dāng)width等于height的時(shí)候,渲染圓形,
第一和第二參數(shù)是矩形的左上角的X軸和Y軸坐標(biāo),第三和第四參數(shù)是矩形
的長和寬
DrawPoint 渲染點(diǎn)說明
渲染點(diǎn)使用畫筆wxPen,因此認(rèn)為渲染點(diǎn)的尺寸大小能夠通過修改畫筆的寬度來修改,實(shí)際上渲染點(diǎn)的尺寸大小始終是1個(gè)像素點(diǎn),所以會(huì)造
成以下的現(xiàn)象:僅僅渲染一個(gè)點(diǎn),在屏幕上是無法通過肉眼看到的
實(shí)例代碼:關(guān)聯(lián)渲染事件OnPaint,在屏幕上(100,100)位置渲染點(diǎn)
void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event )
{
wxClientDC dc(this);
wxPen pen(*wxBLACK, 5);?
dc.SetPen(pen);
dc.DrawPoint(100, 100);
dc.SetPen(wxNullPen);
}
實(shí)例代碼:驗(yàn)證說明確實(shí)已經(jīng)進(jìn)行了渲染并且肉眼可以看見,可以連續(xù)渲染多個(gè)相鄰的點(diǎn),形成直線。關(guān)聯(lián)鼠標(biāo)拖動(dòng)事件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);
}
}
結(jié)論:
為了能夠渲染一個(gè)足夠大的點(diǎn),可以使用渲染圓形的方式
? ? ?本文轉(zhuǎn)自fengyuzaitu 51CTO博客,原文鏈接:http://blog.51cto.com/fengyuzaitu/1955036,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的wxWidgets第九课 wx绘图工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RHS333-5 Kerberized
- 下一篇: 搭建本地Yum软件源安装Cloudera