当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

一个简单的编辑器雏形

    这里用到了屏幕开发库 curses 和键盘函数 keypad.

    下面来看源程序:

    #include<curses.h>

    #define STARTX 1
    #define STARTY 1

    void initial()
    {
    initscr(); /* 初始化 */
    cbreak(); /* 用来开启 cbreak 模式,cbreak 指除了DELETE,CTRL终端处理的特殊字符外,其余键盘输入的字符将立即被读取 */
    nonl(); /* 格式控制 */
    noecho();/* 并不立即显示字符 */
    intrflush(stdscr,FALSE); /* 不读取串 */
    keypad(stdscr,TRUE); /* 键盘响应 */
    refresh(); /* 更新屏幕 */
    }

    int main()

    {
    int x=STARTX;
    int y=STARTY;
    int ch;

    initial();

    //box(stdscr,ACS_VLINE,ACS_HLINE);
    /* 设置窗口形式 */
    move(0,30);
    /* 移动 0 行 30 列 */
    printw("edit"); /* curses 的输出格式,类似 printf */
    refresh();

    move(x,y);


    do{
    ch=getch();
    switch(ch){
    case KEY_UP: /* 获取上键 */
    if(y>1) --y;
    move(y,x);
    break;
    case KEY_DOWN: /* 获取下键 */
    ++y;
    break;

    case KEY_RIGHT: /* 获取右键 */
    ++x;
    break;
    case KEY_LEFT: /* 获取左键 */
    if(x>1) --x;
    break;
    case '\r': /* 获取回车键,并产生一个空行 */
    ++y;
    x=1;
    move(y,x);
    insertln();
    break;
    case '\t': /* 获取 Tab 键 */
    x+=4;
    break;
    case KEY_BACKSPACE: /* 获取删除键,删除字符 */
    if(x>1) --x;
    move(y,x);
    addch(' ');
    break;

    case KEY_DC:
    delch();
    break;
    case 126: /* 设置 ~ 键为退出键 */
    endwin(); /* 结束 curses 模式 */
    exit(0);
    default:
    insch(ch); /* 输出字符 */
    x++;
    break;
    }
    move(y,x);
    }while(1);
    }
    }

    编译程序:gcc -I/usr/include/ncurses edit.c -o edit -lncurses
    程序可移动光标,输入,删除,增加代码就可成为功能强大的编辑器了.

相关内容
赞助商链接