• 小试Curses


    首先我们应该了解, 在终端使用使用的屏幕模式是基于文本的。

    所以在开始使用curses前, 需要用initscr();函数初始化屏幕。

    对应的, 程序结束需要调用endwin();函数来关闭curses状态。

    C可以说是Linux的官方语言, 不过你也可以用C++或Python等语言调用curses。

    #include <curses.h>                   
                                          
    int main() {                          
        initscr();                        
        box(stdscr, ACS_VLINE, ACS_HLINE);
        move(LINES / 2, COLS / 2);        
        waddstr(stdscr, "Hello, world!"); 
        refresh();                        
        getch();                          
        endwin();                         
        return 0;                         
    }                                     
    

    因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样:

    gcc -o box box.c -lcurses
    

    现在用 ./box 运行一下程序看看,是不是出现了你所期望的窗口。

    在这里插入图片描述

    现在我们来一行行分析一下代码.

    #include <curses.h>      
    

    这是每个 curses 程序都必须包含的头文件,表明使用了curses库

         initscr();
    

    然后主函数中第一句initscr();初始化了屏幕, 使之开始进入curses图形化工作方式。

    其实我们现在没有自己建立窗口, 用的是标准屏幕 stdscr(就象C里面标准输入stdin, 标准输出stdout一个概念)。

         box(stdscr, ACS_VLINE, ACS_HLINE);
    

    画了一个框。

    有了这个框我们才有"窗体"的感觉。

    stdscr就是标准屏幕, ACS_VLINE和ACS_HLINE代表构成方框两边的基本元素,也可以用其它符号代替。.

         move(LINES / 2, COLS / 2);
         waddstr(stdscr, "Hello, world!");
    

    这两句是把光标移到屏幕中间, 然后输出我们的"Hello, world!"。

    LINES 和 COLS是curses定义的宏, 代表当前屏幕的最大行数和列数。

    waddstr()函数的作用是在stdscr上打印字符串"hello, world!"。

    屏幕分物理屏幕(我们所看到的)和逻辑屏幕(在内存中的)。

    我们调用函数时修改的是逻辑屏幕,它不会在当前物理屏幕上显示出来。

    所以现在屏幕上还是什么也没有, 需要调用refresh()把我们对逻辑屏幕的改动在物理屏幕(显示器)上显示出来。

    然后用getch()让屏幕暂停一下。

    最后调用endwin()结束curses, 恢复原来的屏幕。

    不过不尽如人意的是屏幕还是那个样子, 没有什么色彩。

    要加色彩也是挺容易的: 首先用start_color()函数开启颜色模式, 然后设置我们要的颜色就行了。

    curses里的颜色是配对的, 要一个背景色对一个前景色。

    使用之前用init_pair()初始化。

    #include <curses.h>                                                                                                                                                                                                                         int main(){                                                                                                               initscr(); /*初始化屏幕*/                                                                                             box(stdscr, ACS_VLINE, ACS_HLINE);                                                                                
        if(start_color() == OK) { /*开启颜色*/           
        	init_pair(1, COLOR_RED, COLOR_GREEN); /*建立一个颜色对*/                                                              	
        	attron(COLOR_PAIR(1)); /*开启字符输出颜色*/                                                                           
        	move(LINES/2, COLS/2);                                                                                                
        	waddstr(stdscr, "Yet another Hello, world!");                                                                         
        	attroff(COLOR_PAIR(1)); /*关闭颜色显示*/                                                                              
        	refresh();                                                                                                        
        } else {                                                                                                                  			
        	waddstr(stdscr, "Can not init color");                                                                                
        	refresh();                                                                                                        
        }                                                                                                                     
        getch();
        endwin(); /*关闭curses状态*/                                                                                          
        return 0;                                                                                                         }
    

    编译加链接:

    gcc -o color color.c -lcurses
    

    之后就可以运行:

    ./color
    

    在这里插入图片描述

  • 相关阅读:
    规范化注释 VVDocumenter的使用方法
    cocoaPods的安装和使用
    AFNetworking 基本使用
    关于iOS9,Xcode7以上的安全性问题
    在collection view中加入 NavigationController问题
    Network Programming(1)
    System-Level I/O (1)
    Virtual Memory(6)
    Virtual memory(5)
    1. Two Sum
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338072.html
Copyright © 2020-2023  润新知