wxWidgets第九課 wx繪圖工具

畫筆畫刷說明

        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);

}

}


結論:

爲了能夠渲染一個足夠大的點,可以使用渲染圓形的方式


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章