AllenYao 发表于 2013-04-17 15:43

NCURSOR窗口疑问?

本帖最后由 AllenYao 于 2013-04-18 09:44 编辑

正在学习NCURSOR,输入了书上的一段例程,但是实际运行效果却有差异,特来请教。

程序代码如下所示:/*
* 例7:带边框的窗口
*/
#include <ncurses.h>

WINDOW *create_newwin(int height, int width, int starty, int startx);

void destroy_win(WINDOW *local_win);

int main(int argc, char *argv[])
{
        WINDOW *my_win;
        int startx, starty, width, height;
        int ch;

        initscr(); /* 初始化并进入curses 模式*/
        cbreak(); /* 行缓冲禁止,传递所有控制信息*/
        keypad(stdscr, TRUE); /* 程序需要使用F1 功能键*/
        height = 3;
        width = 10;
        starty = (LINES-height) / 2; /*计算窗口中心位置的行数*/
        startx = (COLS-width) / 2; /*计算窗口中心位置的列数*/
        printw("Press F1 to exit");
        refresh();

        my_win = create_newwin(height, width, starty, startx);
        while((ch = getch()) != KEY_F(1))
        {
                switch(ch)
                {
                        case KEY_LEFT:
                                destroy_win(my_win);
                                my_win = create_newwin(height, width, starty,--startx);
                                break;
                        case KEY_RIGHT:
                                destroy_win(my_win);
                                my_win = create_newwin(height, width, starty,++startx);
                                break;
                        case KEY_UP:
                                destroy_win(my_win);
                                my_win = create_newwin(height, width, --starty,startx);
                                break;
                        case KEY_DOWN:
                                destroy_win(my_win);
                                my_win = create_newwin(height, width, ++starty,startx);
                                break;
                }
        }
        endwin(); /*结束curses 模式*/
        return 0;
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{
        WINDOW *local_win;
        local_win = newwin(height, width, starty, startx);
        box(local_win, 0 , 0); /* 0, 0 是字符默认的行列起始位置*/
        wrefresh(local_win); /*刷新窗口缓冲,显示box */
        return local_win;
}

void destroy_win(WINDOW *local_win)
{/* box(local_win, ' ', ' ');不会按照预期的那样清除窗口边框。而是在窗口的四个角落留下残
余字符*/
        wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
        /*参数注解9.3:
* 1. win:当前操作的窗口
* 2. ls:用于显示窗口左边界的字符
* 3. rs:用于显示窗口右边界的字符
* 4. ts:用于显示窗口上边界的字符
* 5. bs:用于显示窗口下边界的字符
* 6. tl:用于显示窗口左上角的字符
* 7. tr:用于显示窗口右上角的字符
* 8. bl:用于显示窗口左下角的字符
* 9. br:用于显示窗口右下角的字符
*/
        wrefresh(local_win);
        delwin(local_win);
}
在Window7下使用Putty登录执行的效果是:


在VM虚拟机里直接运行的效果是:


问题:在Putty里窗口边框显示的是字母,是因为Putty没有设置好终端类型吗?
页: [1]
查看完整版本: NCURSOR窗口疑问?