php小編香蕉今天為大家介紹一個有趣又實用的技巧,那就是使用GoNCurses庫在前台視窗移動後刷新後台視窗。 GoNCurses是一個基於Go語言的ncurses函式庫,可以在終端機中建立圖形介面。但是,當我們在前台視窗移動後,後台視窗並不會自動刷新,這給我們的操作帶來了一些不便。透過使用GoNCurses提供的刷新方法,我們可以解決這個問題,讓後台視窗在前台視窗移動後自動刷新,提升使用者體驗。接下來,我們就來詳細了解這個技巧的實作方法。
我試著去了解 ncurses
是如何運作的。這是我正在努力理解並使其發揮作用的一個例子。
首先是想法:
stdscr
)swin
) 位於視窗 1 上,背景不同這是設定:
stdscr, _ := gc.init() defer gc.end() gc.echo(false) gc.cursor(0) gc.cbreak(true) stdscr.setbackground('#') stdscr.moveprint(12, 15, "abcdefghijklmnopq...") stdscr.noutrefresh() y, x := 10, 20 swin, _ := gc.newwindow(4, 8, y, x) swin.keypad(true) swin.setbackground('.') swin.box(0, 0) swin.noutrefresh() gc.update()
還有一個非常簡單的 for
循環,它將有助於移動前台視窗:
main: for { // stdscr.erase() // stdscr.noutrefresh() swin.movewindow(y, x) swin.noutrefresh() gc.update() switch swin.getchar() { case gc.key_right: x++ case gc.key_down: y++ case 'q': break main } } swin.delete() stdscr.delete()
現在,當我移動 window 2
時,後台的那個不會刷新並留下痕跡:
########################## #######┌┌┌┌┌──────┐####### #######│││││......│####### ##abcde│││││......│...#### #######└└└└└──────┘####### ########################## ##########################
當我取消註釋stdscr.erase()
和stdscr.noutrefresh()
時,我修復了踪跡,但當然我丟失了後台視窗上的所有數據,例如文字"abcdefghijklmnopq..."
: p>#
##################### #######┌──────┐###### #######│......│###### #######│......│###### #######└──────┘###### ##################### #####################
我嘗試將 window 2
作為主視窗的子窗口,但沒有成功。我該如何解決/處理這個問題?通常如何使用 ncurses
管理重疊視窗?
謝謝!
curses 不直接支援(請參閱面板庫。否則,您必須使用touchwin
作為解決方法(使用dialog
和cdk
完成)。
以上是GoNCurses 在前台窗口移動後刷新後台窗口的詳細內容。更多資訊請關注PHP中文網其他相關文章!