2017-06-19 41 views
0

我創建了一個主窗口win如何強制刷新詛咒中使用Ruby

win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0) 

然後,我有時需要創建一個消息窗口,覆蓋主要的一個。當我關閉消息窗口,我刷新win

win.refresh 

但除非我使用像在主窗口中改變什麼:

win.addstr("asd") 

refresh不重繪窗口。

有沒有辦法強制重畫窗口?

+0

你試過'#doupdate'嗎?我沒有經驗'Curses'只是看文檔。 – engineersmnky

+0

@engineersmnky否,'#doupdate'不重繪窗口。 – user136379

回答

0

這取決於。

這樣做使用touchwin(或任何名稱的Ruby綁定可能會發生用於C函數)。

ruby 2.0.0,所述標準詛咒爲Ruby結合缺乏touchwintouchline。奇怪的是,它包含了幾個ncurses擴展(resizeterm,鼠標界面,默認顏色)的綁定,但缺少許多標準功能(請參閱X/Open Curses以供參考)。

在2.4.1中,curses不是標準的Ruby模塊,但site for the module確實有touchwin

0

有一種方法Curses::Window#touch它標記窗口已更改,並將由下一個refresh重新繪製。還有方法Curses::Window#redraw,它只是重畫窗口。

另一個問題是:getch方法,它在我的計劃是有點不可預測的,如果我使用Curses.getch - 有時它會導致該窗口不會刷新,有時它會導致整個屏幕上消失...... window對象使用getch解決問題例如win.getch