在静态位图wxWidgets上更改图像

Change image on StaticBitmap wxWidgets

本文关键字:图像 wxWidgets 静态 位图      更新时间:2023-10-16

我想有一个窗口,其中的图片变化取决于在无限循环期间发生的事情。

想象某人四处走动,当他离开给定的轨道时,程序应该显示一个指向轨道方向的箭头。所以我有一个程序,确定用户和轨道之间的距离,但是我不知道如何更新图像。

我使用代码::块与wxWidgets,并认为我必须使用wxStaticBitmap类。(如果有更好的方法,请告诉我。)

I tried with:

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#中尝试类似的东西时,因为线程安全完全失败了……我希望在c++中使用wxWidgets不会这么难。

SetBitmap接受wxBitmap参数,而不是字符串。所以调用应该看起来像这样:

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

请确保在进行此调用之前,png处理程序已经添加了如下调用之一:

wxImage::AddHandler(new wxPNGHandler);

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

如果你想从工作线程更新静态位图,你应该抛出一个wxThreadEvent,然后在事件处理程序中调用SetBitmap。下面的示例展示了如何生成和处理这些事件。