delwin不删除窗口

问题描述 投票:0回答:1

我的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();
}

有什么问题吗?

rust ncurses
1个回答
0
投票

你可以 触摸 主窗口,然后再进行 刷新.

删掉一个窗口对你来说是没有用的(老兄)。delwin):

呼叫 delwin 删除被命名的窗口,释放与之相关的所有内存(它实际上并不删除窗口的屏幕图像)。 在删除主窗口之前,必须先删除子窗口。

看来 ncurses-rs 没有文档,但却是一个 "薄层"(绑定)。 使用 ncurses manpages。

© www.soinside.com 2019 - 2024. All rights reserved.