FLTK child window 未在 Linux 重绘

FLTK child window not redrawing on Linux

我正在做一个不错的 open-source 项目,我希望发布它,但是我遇到了一些问题,child window 在损坏后没有重新绘制。详情请看这张图:

这是我用来显示的代码:

void showMessageWindow (std::string strMessage, std::string strTitle)
{
    Fl_Window* msgWin = new Fl_Window(400, 255, NULL);
    if (strTitle == "")
        msgWin->label("Window Title");
    msgWin->box(FL_BORDER_FRAME);
    msgWin->set_non_modal();

    Fl_PNG_Image* img = new Fl_PNG_Image("/home/obaker/Pictures/info-icon.png");
    Fl_Box* ibox = new Fl_Box(20, 20, 48, 48);
    ibox->image(img);

    Fl_Multiline_Output* mOut = new Fl_Multiline_Output(90, 20, 275, 175, NULL);    
    mOut->box(FL_NO_BOX);
    mOut->wrap(true);
    mOut->readonly(true);
    mOut->cursor_color(FL_BACKGROUND_COLOR);    
    mOut->value(strdup(strMessage.c_str()));

    Fl_Button* btn = new Fl_Button(150, 210, 100, 35, "OK");
    btn->box(FL_GTK_UP_BOX);
    btn->shortcut(FL_Enter);
    btn->callback(msgBoxClose, msgWin);

    msgWin->add(ibox);
    msgWin->add(mOut);
    msgWin->add(btn);

    msgWin->show();
}

我试过使用 Fl_Double_Window 而不是 Fl_Window,结果看起来更糟:

如 'edgy' 和 'cool' 那样,它不适合我的项目。 :-)

我正在 Debian Linux 8、64 位、AMD Radeon HD 6670 显卡、8 GB RAM 上进行开发和测试。 FLTK 的 Debian-provided 版本是 1.3 (1.3.2-6)。

parent window 是一个 Fl_Double_Window 并且它自己重绘就好了。

有什么人可以推荐强制此 child window 在损坏时重绘自身吗?

提前致谢! :-)

在 FLTK 论坛上 Chris 的指导下,我解决了这个问题。

必要的更改是:

msgWin->box(FL_BORDER_BOX)

而不是

msgWin->box(FL_BORDER_FRAME)

"FL_NO_BOX for output may also lead to drawing artifacts. Better set the outputs background color to the windows background color:"

mOut->box(FL_FLAT_BOX);
mOut->color(msgWin->color());

感谢您的帮助! :-)