我想要一个窗口,其中的图片根据无限循环期间发生的变化而变化。

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

我对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显示了如何生成和处理这些事件。

10-04 18:47