FLTK子窗口不在Linux

时间:2016-08-28 05:39:26

标签: c++ linux debian fltk

我正在开发一个我希望发布的一个很好的开源项目,但是我在使用子窗口时遇到了一些问题,而不是在损坏之后重新绘制。有关详细信息,请参阅此图片:

Child window redraw example

以下是我用来显示的代码:

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,看起来更糟糕:

Child window redraw example - Fl_Double_Window

As' edgy'并且'很酷'可能看起来,它不适合我的项目。 : - )

我正在开发和测试Debian Linux 8,64位AMD Radeon HD 6670视频卡,8 GB RAM。 Debian提供的FLTK版本是1.3(1.3.2-6)。

父窗口是一个Fl_Double_Window,它重绘自己很好。

有什么人可以建议强制这个子窗口在它被损坏时重绘吗?

提前谢谢! : - )

1 个答案:

答案 0 :(得分:1)

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

必要的变更是:

msgWin->box(FL_BORDER_BOX)

而不是

msgWin->box(FL_BORDER_FRAME)

  输出的

" FL_NO_BOX也可能导致绘图工件。更好   将输出背景颜色设置为窗口背景颜色:"

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

感谢您的帮助! : - )