您好,登錄后才能下訂單哦!
說明
當使用DC進行圖形渲染的過程中,會出現閃爍的問題,主要是圖形是實時渲染的,如果先渲染在一塊內存中,然后渲染完畢之后,才一次性貼圖到屏幕上,就可以避免閃爍的問題。因此引入wxBufferedPaintDC。wxBufferedPaintDC繼承自wxBufferedDC,wxPaintDC是其私有成員變量,因此該類只能夠在wxPaintEvent事件中使用,也就是只能在OnPaint( wxPaintEvent& event )函數中使用。
為了使用該類,需要包含頭文件#include "wx/dcbuffer.h",目前并沒有被包含在wx/wx.h文件中,可以直接添加,避免每一次手寫
例子
#include "wx/dcbuffer.h"
void CDownLinkPlaybackSliderCtrl::OnPaint( wxPaintEvent& event )
{
wxBufferedPaintDC dc(this);
dc.SetBrush(*wxWHITE_BRUSH);
dc.Clear();
wxSize size = this->GetSize();
int width = size.GetWidth();
int height = size.GetHeight();
int middleHeight = height/2;
dc.SetPen(wxPen(*wxBLACK, 2));
// dc.DrawLine(0, middleHeight-1, width, middleHeight-1);
// dc.DrawLine(0, middleHeight+1, width, middleHeight+1);
dc.SetBrush(*wxBLACK_BRUSH);
dc.DrawRectangle(2, middleHeight-2, width-4, 4);
int topDialHeight = middleHeight-2;
int buttonDialHeight = middleHeight+2;
int averageGap = (width-4)/25;
int count = 0;
for (int i=2; i<width-4; i=i+averageGap)
{
dc.DrawLine(i, topDialHeight, i, topDialHeight-2);
dc.DrawLine(i, buttonDialHeight, i, buttonDialHeight+2);
if (count%4==0)
{
char szText[4] ={0};
sprintf(szText, "%d", count);
wxRect rect(i-3, topDialHeight-2-3, 3, 3);
dc.DrawLabel(szText, rect, 1);
}
count++;
}
dc.SetBrush(*wxWHITE_BRUSH);
dc.DrawRectangle(m_sliderLen-3, middleHeight - 2, 4, 6);
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。