簡體   English   中英

使用wxWidgets進行量規

[英]Gauge using wxWidgets

我正在努力使用wxWidgets制作動畫圓規。 我已經嘗試過將wxSVG與SVG圖像一起使用,以便可以隨窗口縮放,它可以在Linux上運行,但是在Windows下對該庫進行編譯是我退出該方法的問題。 我也嘗試過使用wxArt2D,但即使在Linux下也無法編譯。 現在,我正在使用wxDC和wxImage,但它不會在重新縮放后刷新,並且它具有較大的CPU開銷(筆記本電腦i7的使用率約為30%)。 這是我的代碼:

void MyFrame::OnPanel2EraseBackground(wxEraseEvent& event)
{
}

void MyFrame::OnPanel2Resize(wxSizeEvent& event)
{
    wxSize panelSize = event.GetSize();
    gaugeBuffer = gaugeImg.Scale(panelSize.GetX(), panelSize.GetY(), wxIMAGE_QUALITY_HIGH);
    needleBuffer = needleImg.Scale(panelSize.GetX(), panelSize.GetY(), wxIMAGE_QUALITY_HIGH);
}

void MyFrame::OnPanel2Paint(wxPaintEvent& event)
{
    wxPaintDC dc(Panel2);
    wxPoint offset;
    wxSize drawSize = dc.GetSize();
    memDC.Clear();
    temp = needleBuffer.Rotate((angle*M_PI/180), wxPoint((drawSize.GetX()/2), (drawSize.GetY()/2)), true, &offset);
    memDC.DrawBitmap(gaugeBuffer, 0, 0);
    memDC.DrawBitmap(temp, offset);
    dc.Blit(0, 0, drawSize.GetX(), drawSize.GetY(), &memDC, 0, 0);
}

我沒有發現任何明顯的代碼錯誤,但是每次重繪時旋轉圖像顯然都不會很快(特別是如果它們很大),並且您很有可能在此處進行三倍緩沖(即任何現代系統已經雙緩沖的需要) wxPaintDC ,看到wxAutoBufferedPaintDC一種方式,以避免它同時仍能確保雙緩沖對舊系統進行,或只是刪除多余的內存DC,如果你不關心他們。

您也可以查看wxActivityIndi​​cator實現 ,以做另一種類似的事情,而不會遭受任何嚴重的性能缺陷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM