畫筆畫刷說明
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);
}
}
結論:
爲了能夠渲染一個足夠大的點,可以使用渲染圓形的方式