2011-04-21 5 views
9

Ben bir küfürler penceresinin içine bir şeyler yazmaya çalışıyorum, ama çok sınırlarında yazma gibi görünüyor. Aşağıdaki kodu nasıl düzeltebilirim?penceresinin içine Baskı, değil sınırlarında

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

cevap

11

, box() tarafından oluşturulan sınırları içinde sınırlarıdır. Anlayabildiğim kadarıyla, "sınırımın üzerine yazmayın" demenin bir yolu yok. o zaman, pencere içeriğini çizmek sonra

  • sınır karakterleri üzerine yoktur
  • kutu çizin (move() kullanın):

    Yine de, şu anda aklınıza üç çözüm vardır refresh() ekranı (muhtemelen bir şeyin üzerine yazıyorsunuz, ancak en azından sınır karakterleri değilsiniz)

  • bir kenarlıklı "kenarlık penceresi" ve bunun içinde bir "içerik penceresi" yaratın, elbette ki (border_window_start_y +) 1, border_wind box() fonksiyon "Bu pencerenin görünür sınırları var" özelliğini eklemez: ow_start_x + 1) ve "sınır pencere"


Sadece daha net hale getirmek için daha iki satır/sütun küçüktür Pencere, pencerenin etrafındaki sınır karakterlerini yazdırır.

Sen şunlardır:

  • bunları üzerine yazılır
+1

Geçici çözüm olarak üçüncü çözümü seçtim. Şimdi kesmek 'üretim kodu' gibi görünüyor. – Alexandru

+1

Evet, bence mümkün olan en iyi çözüm. – Philip

+1

Üçüncüsü gerçekten iyi bir fikir ve ben de onu hayata geçirdim. Ama şimdi birden çok örtüşen pencere ve panel ile ilgili bir sorunum var. Dış (kenarlık) pencereyi panele atarım, ancak pencereyi kapattığımda (gizler), aşağıdaki pencereye aşağıdaki pencereye atanan pencerenin yenilenmediği bir pencere açılırsa, bunun için de bir çözüm var mı? belki ek paneller? – aurora

0

Ben kolay yolu yaratmaktır söyleyebilirim istemiyorsanız

  • temkinli olması gerekiyordu bu sınır karakterleri üzerine yazmak serbest Pencerenin içinde bir pencere kenarlığı ve bu pencerede yazdırır.

    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");