gpt4 book ai didi

c++ - FLTK 子窗口在 Linux 上不重绘

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:10 28 4
gpt4 key购买 nike

我正在做一个不错的开源项目,我希望发布它,但是我遇到了一些问题,子窗口在损坏后没有重新绘制。详情请看这张图片:

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

尽管看起来“前卫”和“酷”,但它不适合我的项目。 :-)

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

父窗口是一个 Fl_Double_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());

感谢大家的帮助! :-)

关于c++ - FLTK 子窗口在 Linux 上不重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188336/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com