在StaticBitmap上更改图像wxWidgets

时间:2016-11-07 13:30:41

标签: c++ image bitmap wxwidgets

我想有一个窗口,根据无限循环期间发生的情况,图片会发生变化。

想象一下有人四处走动,当他离开一条特定的轨道时,程序应该朝向轨道方向显示一个箭头。因此我有一个程序,它确定用户和轨道之间的距离,但我不知道如何更新图像。

我将code :: blocks与wxWidgets一起使用,并认为我必须使用wxStaticBitmap类。 (如果有更好的方法,请告诉我。)

我尝试过:

while(true)
{
    updatePosition();
    if(userNotOnTrack)
    {
        if(trackRightOfUser)
        {
            StaticDirectionBitmap->SetBitmap("D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png");
        }
    }
}

(请注意,此代码段主要是伪代码,但StaticDirectionBitmap部分除外。)

默认情况下,Bitmap具有“no_arrow”图像。有了这个,我收到一个错误:error: no matching function for call to 'wxStaticBitmap::SetBitmap(const char [51])'|。我从文档中看到这不起作用,但我不知道它能做什么。

如果有人知道如何处理这个问题,我会很高兴听到。我记得几年前,当我在C#中尝试过类似的东西并因为线程安全而完全失败时...我希望在使用wxWidgets的C ++中这并不难。

1 个答案:

答案 0 :(得分:2)

SetBitmap采用wxBitmap参数而不是字符串。所以电话应该看起来像:

SetBitmap(wxBitmap( "D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png", wxBITMAP_TYPE_PNG) );

在进行此调用之前,请确保已添加png处理程序,其调用方式如下:

wxImage::AddHandler(new wxPNGHandler);

::wxInitAllImageHandlers();

最简单的地方是在应用程序OnInit()方法中。

如果要从工作线程更新静态位图,则应抛出wxThreadEvent,然后在事件处理程序中调用SetBitmap。示例here显示了如何生成和处理这些事件。