【问题标题】:Change image on StaticBitmap wxWidgets在 StaticBitmap wxWidgets 上更改图像
【发布时间】:2016-11-07 13:30:41
【问题描述】:

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

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

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

我试过了:

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

(注意这个 sn-p 大部分是伪代码,除了StaticDirectionBitmap 部分。)

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

如果有人知道如何处理这个问题,我会很高兴听到。我记得几年前,我在 C# 中尝试过类似的东西,但由于线程安全而完全失败了……我希望在带有 wxWidgets 的 C++ 中这不是那么难。

【问题讨论】:

    标签: c++ image bitmap wxwidgets


    【解决方案1】:

    SetBitmap 采用 wxBitmap 参数而不是字符串。所以调用应该是这样的:

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

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

    wxImage::AddHandler(new wxPNGHandler);
    

    ::wxInitAllImageHandlers();
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2010-12-27
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多