使用wxWidgets进行测量
Gauge using wxWidgets
我正在努力使用wxWidgets制作动画圆形gauge。我尝试过使用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如果你不关心他们。
您还可以查看wxActivityIndicator的实现,以寻找另一种方法来做类似的事情,而不会遭受任何严重的性能缺陷。
相关文章:
- 在C++中测量postscript字体宽度
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 什么是事件表 (wxWidgets)?
- 用时钟测量程序的运行时间
- 无法编译wxWidgets Hello World
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 内存所有位置 wxWidgets
- С++ wxWidgets:代码架构,设计原则和模式
- 用于测量微秒的QueryPerformanceCounter的奇怪行为
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- 为什么根据测量位置测量经过的时间时会有很大的不同?
- 从 wxWidgets 中的.DLL加载图标
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- 分别测量每个线程上花费的 CPU 时间(C++)
- C++ wxWidgets:在创建小部件后设置字体
- 如何测量管道延迟?
- C++ wxWidgets:更改大小器的字体
- 使用wxWidgets进行测量