我想要一个窗口,其中的图片根据无限循环期间发生的变化而变化。
想象一下有人走来走去,当他离开给定的轨道时,程序应该显示一条指向轨道方向的箭头。因此,我有一个确定用户与轨道之间距离的程序,但是我不知道如何更新图像。
我对wxWidgets使用code :: blocks,并认为我必须使用wxStaticBitmap
类。 (如果有更好的方法,请告诉我。)
我尝试过:
while(true)
{
updatePosition();
if(userNotOnTrack)
{
if(trackRightOfUser)
{
StaticDirectionBitmap->SetBitmap("D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png");
}
}
}
(请注意,除了
StaticDirectionBitmap
部分,此代码段主要是伪代码。)默认情况下,位图具有“ no_arrow”图像。这样我得到一个错误:
error: no matching function for call to 'wxStaticBitmap::SetBitmap(const char [51])'|
。我从文档中看到这是行不通的,但是我不知道该怎么办。如果有人知道该如何处理,我将很高兴听到。我记得几年前,当我在C#中尝试类似的操作并由于线程安全性而完全失败时,我希望在w ++ Widgets的C ++中这不是难事。
最佳答案
SetBitmap采用wxBitmap参数而不是字符串。因此,呼叫应类似于:
SetBitmap(wxBitmap( "D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png", wxBITMAP_TYPE_PNG) );
在进行此调用之前,请确保已添加png处理程序,并添加了类似于以下之一的调用:
wxImage::AddHandler(new wxPNGHandler);
要么
::wxInitAllImageHandlers();
最简单的方法是在应用程序的OnInit()方法中。
如果要从工作线程更新静态位图,则应抛出wxThreadEvent,然后在事件处理程序中调用SetBitmap。样本here显示了如何生成和处理这些事件。