2016-11-07 94 views
0

我想要一个窗口,其中图片根据无限循环期间发生的情况而变化。在StaticBitmap上更改图片wxWidgets

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

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

我试着用:(注意,这个片段大多是伪代码,除了StaticDirectionBitmap部分)

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

在默认情况下,位图有一个“no_arrow”图像。有了这个,我得到一个错误:error: no matching function for call to 'wxStaticBitmap::SetBitmap(const char [51])'|。我从文档中看到,这是行不通的,但我不知道有什么可以。

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

回答

2

SetBitmap接受wxBitmap参数而不是字符串。所以通话应该是这个样子:

wxImage::AddHandler(new wxPNGHandler); 

::wxInitAllImageHandlers(); 

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

在进行此调用的PNG处理中已经加入了一个调用,比如下面的一个之前确认

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

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