我的ncurses应用程序使用Rust。
当用户按F5键时,行号窗口应该被切换。当用户第一次按F5键时,该窗口按理应出现,但当第二次按F5键时,该窗口并没有消失,仍然存在。但是,第二次按键时,窗口并没有消失,还是在那里,好像delwin调用不成功一样。我试过刷新屏幕后,但一直没有成功。
这是一个最小的例子。
use ncurses::*;
struct LineNumbers {
window: WINDOW,
shown: bool
}
impl LineNumbers {
fn new() -> LineNumbers {
LineNumbers {
window: newwin(LINES(), 5, 0, 0),
shown: false
}
}
fn toggle(&mut self) {
if self.shown == true {
self.hide();
} else {
self.show();
}
}
fn show(&mut self) {
self.shown = true;
wbkgd(self.window, COLOR_PAIR(1));
wrefresh(self.window);
}
fn hide(&mut self) {
self.shown = false;
delwin(self.window);
refresh();
}
}
fn main() {
setlocale(LcCategory::all, "");
initscr();
keypad(stdscr(), true);
start_color();
init_pair(1, COLOR_RED, COLOR_RED);
let mut ln = LineNumbers::new();
loop {
let user_input = get_wch();
match user_input.unwrap() {
WchResult::Char(ch) => {
match ch {
27 => break,
_ => {}
}
},
WchResult::KeyCode(code) => {
match code {
KEY_F5 => {
ln.toggle();
},
_ => {}
}
}
}
}
endwin();
}
有什么问题吗?
你可以 触摸 主窗口,然后再进行 刷新.
删掉一个窗口对你来说是没有用的(老兄)。delwin
):
呼叫
delwin
删除被命名的窗口,释放与之相关的所有内存(它实际上并不删除窗口的屏幕图像)。 在删除主窗口之前,必须先删除子窗口。
看来 ncurses-rs 没有文档,但却是一个 "薄层"(绑定)。 使用 ncurses manpages。