Maison >développement back-end >Golang >GoNCurses Actualiser la fenêtre d'arrière-plan après le déplacement de la fenêtre de premier plan

GoNCurses Actualiser la fenêtre d'arrière-plan après le déplacement de la fenêtre de premier plan

WBOY
WBOYavant
2024-02-10 13:24:09761parcourir

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

l'éditeur php Banana vous présente aujourd'hui une technique intéressante et pratique, qui consiste à utiliser la bibliothèque GoNCurses pour actualiser la fenêtre d'arrière-plan après le déplacement de la fenêtre avant. GoNCurses est une bibliothèque ncurses basée sur le langage Go permettant de créer des interfaces graphiques dans le terminal. Cependant, lorsque nous déplaçons la fenêtre de premier plan, la fenêtre d'arrière-plan ne s'actualise pas automatiquement, ce qui apporte quelques désagréments à nos opérations. En utilisant la méthode d'actualisation fournie par GoNCurses, nous pouvons résoudre ce problème et permettre à la fenêtre d'arrière-plan de s'actualiser automatiquement après le déplacement de la fenêtre de premier plan, améliorant ainsi l'expérience utilisateur. Voyons ensuite de plus près comment mettre en œuvre cette technique.

Contenu de la question

J'essaie de comprendre comment fonctionne ncurses. Voici un exemple de ce que j'essaie de comprendre et de faire fonctionner.

Premières réflexions :

  • Fenêtre 1 avec fond et texte imprimé (stdscr)
  • La fenêtre 2 (swin) est au-dessus de la fenêtre 1 avec un arrière-plan différent
  • Déplacez la fenêtre 2 sur la fenêtre 1

Voici les paramètres :

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

Il existe également une for boucle très simple qui permettra de déplacer la fenêtre de premier plan :

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

Maintenant quand je bouge window 2 celui en arrière-plan ne se rafraîchit pas et laisse une trace :

##########################
#######┌┌┌┌┌──────┐#######
#######│││││......│#######
##abcde│││││......│...####
#######└└└└└──────┘#######
##########################
##########################

Quand je décommente stdscr.erase()stdscr.noutrefresh() 时,我修复了踪迹,但当然我丢失了后台窗口上的所有数据,例如文本 "abcdefghijklmnopq...": p>

#####################
#######┌──────┐######
#######│......│######
#######│......│######
#######└──────┘######
#####################
#####################

J'ai essayé de créer window 2 作为主窗口的子窗口,但没有成功。我该如何解决/处理这个问题?通常如何使用 ncurses une fenêtre enfant de la fenêtre principale mais sans succès. Comment puis-je résoudre/traiter ce problème ? Comment les fenêtres qui se chevauchent sont-elles généralement gérées à l'aide de

 ? Merci!

Solution de contournement

les curses ne sont pas directement prises en charge (voir la bibliothèque panel Sinon, vous devez utiliser touchwin 作为解决方法(使用 dialogcdktouchwin

comme solution de contournement (en utilisant dialog et cdk terminé) 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer