C指针原理(31)-Ncurses-文本终端的图形
9、Ncurses的初始化相关工作
(1)raw()和cbreak()
禁止行缓冲,在raw()函数模式下,处理挂起(CTRLZ)、中断或退出(CTRLC)等控制字符时,将直接传送给程序去处理而不产生终端信号,而cbreak()将产生终端信号。
(2)cho()函数和noecho()函数
控制是否将从键盘输入的字符回显在终端上。
(3)keypad()函数
允许使用功能键。
(4)initscr()函数
屏幕初始化并进入curses 模式
(5)printw()与refresh()函数
printw()函数的作用是不断将一些显示标记和相关的数据结构写在虚拟显示器上,并将这些数据写入stdscr 的缓冲区内。须使用refresh()函数告诉curses系统将缓冲区的内容输出到屏幕上。
下面例子演示了相关用法
(6)endwin()
函数释放了curses 子系统和相关数据结构占用的内存,使你能够正常返回控制台模式。
(7)addch()、printw()、addstr()
在curses 函数中有三类输出函数,它们分别是:
addch():将单一的字符打印到屏幕上,可以附加加字符修饰参数的一类函数。
printw():和printf()一样的具有格式化输出的一类函数。
addstr():打印字符串的一类函数,用于在指定窗口输出字符串
(8)mvprintw()
函数将光标移动到指定的位置,然后打印内容。
代码如下:
dp@dp:~/cursestest % cat 1.c
#include <ncurses.h>
#include <locale.h>
int main()
{
int ch;
setlocale(LC_ALL,"");
initscr(); / 开始curses 模式/
raw(); / 禁用行缓冲/
keypad(stdscr, TRUE); / 开启功能键响应模式/
noecho(); / 当执行getch()函数的时候关闭键盘回显/
printw(“请按键!”);
ch = getch(); /* 如果没有调用raw()函数,
我们必须按下enter 键才可以将字符传递给程序*/
if(ch == KEY_F(2)) / 如果没有调用keypad()初始化,将不会执行这条语句/
printw(“F2键按下!”);
/ 如果没有使用noecho() 函数,一些控制字符将会被打印到屏幕上/
else
{
printw(“按键是:”);
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
}
refresh(); / 将缓冲区的内容打印到显示器上/
getch(); / 等待用户输入/
endwin(); / 结束curses 模式/
return 0;
}
编译并执行程序:
dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest
(10)scanw()函数
能够在屏幕的任意位置读入格式化字符串。
(11)wscanw()函数和mvwscanw()函数
从一个窗口中读取数据
getstr()系列函数
这些函数用于从终端读取字符串。本质上,这个函数执行的任务和连续用getch()函数读取
字符的功能相同:在遇到回车符、新行符和文末符时将用户指针指向该字符串。
示例如下:
dp@dp:~/cursestest % cat 1.c
#include <locale.h>
#include <ncurses.h>
#include <string.h>
int main()
{
char mess[]=“您的性别:”; / 将要被打印的字符串信息/
char mesg[]=“您的名字:”; / 将要被打印的字符串信息/
char name[80];
char sex[10];
int row,col; / 存储行号和列号的变量,用于指定光标位置/
setlocale(LC_ALL,"");
initscr(); / 进入curses 模式/
getmaxyx(stdscr,row,col); / 取得stdscr 的行数和列数/
mvprintw(row/2,col/2-strlen(mesg),"%s",mesg); / 在屏幕的正中打印字符串mesg /
getstr(name); / 将指针name 指向读取的字符串/
mvprintw(row/3,col/2-strlen(mess),"%s",mess); / 在屏幕的正中打印字符串mesg /
getstr(sex); / 将指针sex向读取的字符串/
char man[]=“man”;
if (strcmp(sex,man)==0) {
mvprintw(LINES-2,0, “%s先生好,很高兴认识您”, name);//LINES为当前行数
}
else
{
mvprintw(LINES-2,0, “%s女士好,很高兴认识您”, name);//LINES为当前行数
}
refresh();
getch();
endwin();
return 0;
}
编译并执行程序:
dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest
(11)窗口输入与输出
wprintw() 函数和mvwprintw 函数为输出函数,将在指定的窗口输出。
wscanw()函数和mvwscanw()函数从一个窗口中读取数据。
#include <ncurses.h>
#include <locale.h>
int main(){
//init_pair(short index,short foreground,short background)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
//newwin建立窗口,derwin建立窗口的子窗口(相对于父窗口相对位置),subwin建立窗口的子窗口(相对于根窗口绝对位置)
setlocale(LC_ALL,"");char mesg[]="您的名字:"; / 将要被打印的字符串信息/char name[80];WINDOW *win1;initscr();//初始化win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)box(win1,ACS_VLINE,ACS_HLINE);mvwprintw(win1,1,1,"WIN1");mvwprintw(win1,2,1,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高兴认识您", name);wrefresh(win1);endwin();//结束return 0;
}
dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest
dp@dp:~/cursestest % ./mytest
(11)窗口输入与输出
wprintw() 函数和mvwprintw 函数为输出函数,将在指定的窗口输出。
wscanw()函数和mvwscanw()函数从一个窗口中读取数据。
#include <ncurses.h>
#include <locale.h>
int main(){
//init_pair(short index,short foreground,short background)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
//newwin建立窗口,derwin建立窗口的子窗口(相对于父窗口相对位置),subwin建立窗口的子窗口(相对于根窗口绝对位置)
setlocale(LC_ALL,"");char mesg[]="您的名字:"; / 将要被打印的字符串信息/char name[80];WINDOW *win1;initscr();//初始化win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)box(win1,ACS_VLINE,ACS_HLINE);mvwprintw(win1,1,1,"WIN1");mvwprintw(win1,2,1,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高兴认识您", name);wrefresh(win1);endwin();//结束return 0;
}
dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest
dp@dp:~/cursestest % ./mytest
C指针原理(31)-Ncurses-文本终端的图形相关推荐
- C指针原理(34)-Ncurses-文本终端的图形
下面使用getwin和putwin完成对窗口内容的保存,而不是对整个屏幕,同时修正程序的几个小错误: 1.下面的操作提示在多次操作后会出现混乱. 2.退出后,endwin结束窗口,并且退出curses ...
- C指针原理(35)-Ncurses-文本终端的图形
下面将全屏编辑器修改一下,通过panel的支持,让它能同时打开3个窗口编辑不同的内容,同时对3个窗口的内容进行保存. 效果如下: #include <locale.h>#include & ...
- C指针原理(33)-Ncurses-文本终端的图形
键盘管理 我们打造一个简单的单屏编辑器 首先构造一个仅带输入功能的编辑器,使用wgetch来捕捉输入. #include <locale.h>#include <stdio.h> ...
- C指针原理(29)-Ncurses-文本终端的图形
1.安装Ncurses Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库. Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以: ...
- Objective-C中,ARC下的 strong和weak指针原理解释
Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...
- Python 文本终端 GUI 框架,太酷了
来源:Python技术 上次发了一篇基于 Webview 的图形界面的程序 制作后,有读者询问:有没有基于文本中终端的 GUI 开发框架? 今天笔者就带大家,梳理几个常见的基于文本终端的 UI 框架, ...
- iOS arc weak指针原理
iOS arc weak指针原理 ARC 都帮我们做了什么? weak是什么? weak是怎么实现的? 1. weak原理简介 2. weak简单测试 3. weak原理分析 3.1 weak指针帮我 ...
- 推荐3个Python 文本终端 GUI 框架,太酷了
最近看到几个有意思的基于文本终端的 UI 框架,还可以制作命令行网易云音乐. 喜欢本文记得收藏.点赞.关注. Curses 首先出场的是 Curses[1]. Curse Curses 是一个能提供基 ...
- linux虚拟机状态转换图,VirtualBox的Linux虚拟机文本模式和图形模式的切换问题
1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...
最新文章
- android studio 加固和签名
- 领跑交互新时代 蓦然认知助力传统产业智能化升级
- 蓝桥杯真题 a组 java_2014蓝桥杯决赛A组第5题(java)
- NLP之BoWNLTK:自然语言处理中常用的技术——词袋法Bow、NLTK库
- Hadoop学习笔记—1.基本介绍与环境配置
- 把SAP里的负号放到前面来的函数
- 可以对同一个html元素定义不同的样式,CSS的多种选择器的使用.ppt
- MacBooster清理除Mac大文件和旧文件
- 在计算机桌面中选择了隐藏如何显示,怎么把隐藏电脑桌面游戏找到
- 搭建动态IP池的几种方式,有什么优缺点
- 在Qt下使用映美精黑白相机:Qt 5.12 + ImagingSource(映美精)+ vs2017 Community + OpenCV 3.3
- 结构体定义LNode,*LinkList和typedef struct
- 如何变更 Git 服务器 IP 地址以及变更后的解决方法
- Springboot+vue项目火车订票管理系统
- 基于c++图形化界面的clock页面置换算法
- java的SSPanel类_SpringBoot中遇到的一些问题
- Jsp之一 WEB应用程序概述
- 激光打印机的工作原理2
- JavaWeb网上书城 结课设计
- 算法:深度优先搜索(一)