在 FLTK 框内更改图像的问题

Problem with changing image inside the box FLTK

我在 Fl_Box.

中更改图像(Fl_PNG_image 大小 25x25[在此处输入图像描述][1])时遇到问题

下面是更改框的代码部分:

        if(strcmp(payload, "heat")==0) tryb_pracy_box->image(grzanie_png);
        if(strcmp(payload, "cool")==0) tryb_pracy_box->image(chlodzenie_png);
        tryb_pracy_box->redraw();

然后我还有一个 Fl::check();

但是当我尝试更改图像时,结果如下所示: [1][1]: https://i.stack.imgur.com/xb7by.png

据我所知,图像“出现”在标签上,但当我尝试使用不同的对齐方式时,它没有帮助。

这是我正在使用的图片 [2][2]: https://i.stack.imgur.com/h0GVz.png [3][3]: https://i.stack.imgur.com/OS2bC.png

提前致谢!

我发现直接使用 subclass Fl_Box 并实现(覆盖)draw 方法更容易。在其中你可以调用 fl_draw_image(…) 和 fl_draw(const char *, …)。这允许您在图像上准确指定文本的坐标,而无需调整相对于图像的对齐方式。您可以在 class 中存储图像指针并更改它指向的内容。

此处描述的此类效果通常是由具有“无背景”的小部件引起的,即方框类型 FL_NO_BOX 或 FL_*_FRAME 类型之一。如果您更改图像或标签(假设它们在框内),则更改后的 label/image 会覆盖现有标签。在这种情况下,您有两种选择:

  1. 重绘父控件,将tryb_pracy_box->redraw();更改为tryb_pracy_box->parent()->redraw();
  2. 将方框类型更改为纯色背景,例如FL_FLAT_BOX.

如果标签(和图像)在小部件之外,则在更改标签时绝对有必要绘制父小部件。