2016-08-28 2 views
1

Ich arbeite an einem netten Open-Source-Projekt, das ich hoffe, zu veröffentlichen, aber ich habe einige Probleme mit einem Kind-Fenster nicht neu zeichnen, nachdem sie beschädigt. Bitte beachten Sie dieses Bild für Details:FLTK Kind Fenster nicht neu zeichnen auf Linux

Child window redraw example

Hier ist der Code Ich verwende diese anzuzeigen:

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(); 
} 

ich versucht habe, mit Fl_Double_Window statt Fl_Window und es sieht noch schlimmer aus:

Child window redraw example - Fl_Double_Window

als ‚nervös‘ und ‚cool‘ wie das aussehen könnte, dann ist es nicht geeignet für mein Projekt. :-)

Ich entwickle und teste auf Debian Linux 8, 64-Bit, AMD Radeon HD 6670 Grafikkarte, 8 GB RAM. Die von Debian bereitgestellte Version von FLTK ist 1.3 (1.3.2-6).

Das übergeordnete Fenster ist ein Fl_Double_Window und es zeichnet sich neu gut.

Gibt es irgendetwas, das jemand empfehlen könnte, um dieses untergeordnete Fenster neu zu zeichnen, wenn es beschädigt ist?

Vielen Dank im Voraus! :-)

Antwort

1

Nach Anleitung von Chris in den FLTK-Foren konnte ich dieses Problem lösen.

Die Änderungen notwendig sind.

msgWin->box(FL_BORDER_BOX)

statt

msgWin->box(FL_BORDER_FRAME)

„FL_NO_BOX für die Ausgabe zu zeichnen Artefakte können auch führen Bessere setzen die Outputs Hintergrundfarbe zu den Fenstern b ackground Farbe:“

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

Vielen Dank für Ihre Hilfe! :-)