2011-04-21 8 views
9

Estoy tratando de escribir algo dentro de una ventana de curses, pero parece que también escribe en las fronteras. ¿Cómo puedo arreglar el código a continuación?Imprimir dentro de la ventana, no en los bordes

win_self = newwin(LINES/2, COLS, 0, 0); 
box(win_self, 0, 0); 
wrefresh(win_self); 
wprintw(win_self, "foobar"); 

Respuesta

11

En maldiciones, los bordes generados por box() son dentro fronteras. Por lo que puedo decir, no hay forma de decir simplemente "no sobrescribir mi frontera".

Sin embargo, hay tres soluciones que se me ocurre en este momento:

  • no sobrescribir los caracteres de borde (de uso move())
  • dibujar la caja después de se dibuja contenido de la ventana, a continuación, refresh() la pantalla (probablemente aún esté sobreescribiendo algo, pero al menos no son los caracteres fronterizos)
  • crear una "ventana de borde" con bordes y una "ventana de contenido" dentro de ella, que por supuesto comienza en (border_window_start_y + 1, border_wind ow_start_x + 1) y es dos líneas/columnas más pequeña que la "ventana de frontera"


Sólo para que quede más claro: la función box() no añadir la propiedad "de esta ventana tiene bordes visibles" a la ventana, simplemente imprime caracteres de borde alrededor de la ventana.

Usted son:

  • libre para sobrescribir los caracteres de borde
  • supone que debemos tener cuidado si no quiere que sobrescribe
+1

Escogí la tercera solución como un hack temporal. Ahora parece que el truco es 'código de producción'. – Alexandru

+1

Sí, creo que es la mejor solución posible. – Philip

+1

El tercero es realmente una buena idea y lo implementé también. Pero ahora tengo un problema con múltiples ventanas y paneles superpuestos. Asigno la ventana exterior (borde) al panel, pero cuando cierro (oculto) una ventana, la otra ventana a continuación no se actualiza para la ventana que no está asignada al panel de abajo ... ¿hay alguna solución para esto también? tal vez paneles adicionales? – aurora

0

yo diría que la forma más fácil es crear una ventana dentro de los bordes de la ventana e imprima en esa ventana.

win_self = newwin(LINES/2, COLS, 0, 0); 
box(win_self, 0, 0); 
derwin_self = derwin(win_self, LINES/2 - 2, COLS - 2, 0, 0); 
wprintw(derwin_self, "foobar"); 
Cuestiones relacionadas