首頁 >後端開發 >Golang >GoNCurses 在前台窗口移動後刷新後台窗口

GoNCurses 在前台窗口移動後刷新後台窗口

WBOY
WBOY轉載
2024-02-10 13:24:09761瀏覽

GoNCurses 在前台窗口移动后刷新后台窗口

php小編香蕉今天為大家介紹一個有趣又實用的技巧,那就是使用GoNCurses庫在前台視窗移動後刷新後台視窗。 GoNCurses是一個基於Go語言的ncurses函式庫,可以在終端機中建立圖形介面。但是,當我們在前台視窗移動後,後台視窗並不會自動刷新,這給我們的操作帶來了一些不便。透過使用GoNCurses提供的刷新方法,我們可以解決這個問題,讓後台視窗在前台視窗移動後自動刷新,提升使用者體驗。接下來,我們就來詳細了解這個技巧的實作方法。

問題內容

我試著去了解 ncurses 是如何運作的。這是我正在努力理解並使其發揮作用的一個例子。

首先是想法:

  • 有背景和列印文字的視窗 1 (stdscr)
  • 視窗 2 (swin) 位於視窗 1 上,背景不同
  • 將視窗 2 移到視窗 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 作為解決方法(使用dialogcdk 完成)。

以上是GoNCurses 在前台窗口移動後刷新後台窗口的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除