我創建了一個主窗口win
:如何強制刷新詛咒中使用Ruby
win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0)
然後,我有時需要創建一個消息窗口,覆蓋主要的一個。當我關閉消息窗口,我刷新win
:
win.refresh
但除非我使用像在主窗口中改變什麼:
win.addstr("asd")
refresh
不重繪窗口。
有沒有辦法強制重畫窗口?
我創建了一個主窗口win
:如何強制刷新詛咒中使用Ruby
win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0)
然後,我有時需要創建一個消息窗口,覆蓋主要的一個。當我關閉消息窗口,我刷新win
:
win.refresh
但除非我使用像在主窗口中改變什麼:
win.addstr("asd")
refresh
不重繪窗口。
有沒有辦法強制重畫窗口?
這取決於。
這樣做使用touchwin
(或任何名稱的Ruby綁定可能會發生用於C函數)。
在ruby 2.0.0,所述標準詛咒爲Ruby結合缺乏touchwin
和touchline
。奇怪的是,它包含了幾個ncurses擴展(resizeterm
,鼠標界面,默認顏色)的綁定,但缺少許多標準功能(請參閱X/Open Curses以供參考)。
在2.4.1中,curses不是標準的Ruby模塊,但site for the module確實有touchwin
。
有一種方法Curses::Window#touch
它標記窗口已更改,並將由下一個refresh
重新繪製。還有方法Curses::Window#redraw
,它只是重畫窗口。
另一個問題是:getch
方法,它在我的計劃是有點不可預測的,如果我使用Curses.getch
- 有時它會導致該窗口不會刷新,有時它會導致整個屏幕上消失...... window對象使用getch
解決問題例如win.getch
你試過'#doupdate'嗎?我沒有經驗'Curses'只是看文檔。 – engineersmnky
@engineersmnky否,'#doupdate'不重繪窗口。 – user136379