2016-08-28 19 views
1

私は解放したいと思っている素敵なオープンソースプロジェクトに取り組んでいますが、破損した後に再描画しない子ウィンドウに問題があります。詳細については、この画像を参照してください。FLTKの子ウィンドウがLinux上で再描画されない

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

は、私がこれを表示するために使用しているコードです。 「エッジの効いた」と「クール」のよう

Child window redraw example - Fl_Double_Window

それはそれは私のプロジェクトのために適切ではないですが、見えるかもしれませんよう。 :-)

私は、Debian Linux 8,64ビット、AMD Radeon HD 6670ビデオカード、8GB RAMを開発し、テストしています。 Debianが提供するFLTKのバージョンは1.3(1.3.2-6)です。

親ウィンドウはFl_Double_Windowであり、それ自体はうまく再描画されます。

この子ウィンドウが破損したときに、この子ウィンドウを強制的に再描画するように推奨できるものはありますか?

ありがとうございます! :-)

答えて

1

ChrisさんからFLTKフォーラムでの指導の後、私はこの問題を解決できました。

必要な変更は、次のとおり。代わり

msgWin->box(FL_BORDER_FRAME)

msgWin->box(FL_BORDER_BOX)

「出力用FL_NO_BOXもアーティファクトを図面につながる可能性 より良い出力を設定しますウィンドウbの背景色ackground色:」

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

は、あなたの助けのすべてをありがとう! :-)

関連する問題