日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wxWidgets第九课 wx绘图工具

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);

}

}


結論:

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




? ? ?本文轉自fengyuzaitu 51CTO博客,原文鏈接:http://blog.51cto.com/fengyuzaitu/1955036,如需轉載請自行聯系原作者




總結

以上是生活随笔為你收集整理的wxWidgets第九课 wx绘图工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。