【问题标题】:c++ FLTK Image redrawc++ FLTK 图像重绘
【发布时间】:2014-10-23 05:50:46
【问题描述】:

我正在制作一个简单的 FLTK 应用程序(在 linux 中),它需要在 FL_Window 中显示 PNG 图像。下一段代码:

Fl_PNG_Image* pngImg;
Fl_Box* boxImage;
boxImage = new Fl_Box(500, 470, 0, 0);
pngImg = new Fl_PNG_Image("main.png");
boxImage->image(pngImg);
boxImage->redraw();`

画好了。但是当我喜欢这个时:

我的形象毁了。我需要调用哪个回调来避免图像破坏?如何正确更新盒子?如何手动从磁盘重新加载图像?

【问题讨论】:

  • “将窗口移出屏幕”到底是什么意思?
  • 我无法重新创建错误,但我在 Mac 上可能会以不同方式处理窗口管理。这行boxImage = new Fl_Box(500, 470, 0, 0); 困扰我:您正在定义一个大小为零的框。试试boxImage = new Fl_Box(500, 470, sx, sy);,其中sx 是图像的宽度,sy 是图像的高度,然后报告...
  • 另一件可能要尝试的事情是fl_register_images() 但只是检查...

标签: c++ fltk


【解决方案1】:

试试这个:(来源:http://osdir.com/ml/lib.fltk.general/2004-07/msg00396.html

注意:由于我无法重新创建您的错误,因此我不确定它是否会解决它,但无论出于何种原因,您的主窗口在应该重绘时都没有被重绘,这似乎是合理的。

子类化父窗口并让它手动重绘其内容,并在移动时使用 Fl::check() 推动 FLTK 尽快完成它,以便您拥有类似的东西

class Mywin : public Fl_Window {
    void resize(int X, int Y, int W, int H) {
        Fl_Window::resize(X,Y,W,H);
        redraw();
        Fl::check();
    }
public:
    Mywin(int x,int y,int w, int h) : Fl_Window(x,y,w,h) {
    }
};

int main() {


    Mywin* win = new Mywin(20,20,800,800);
    Fl_Box* box = new Fl_Box(100,100,300,200);//for example


    Fl_PNG_Image* pngImg = new Fl_PNG_Image("main.png");
    box->image(pngImg);
    box->show();
    win->end();
    win->show();
    return (Fl::run());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多