C指针原理(67)-Ncurses-文本终端的图形
来源:互联网 发布:剑三道姑捏脸数据 编辑:程序博客网 时间:2024/04/28 23:03
麦好的AI乐园博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
case 9:
top = (PANEL *)panel_userptr(top);
top_panel(top);
update_panels();
doupdate();
nowwinid=(++nowwinid)%3;
sprintf(filename,"myed%d.dat",nowwinid);
break;
case KEY_F(10):
//存盘
mvprintw(LINES-3,2," ");
mvprintw(LINES-3,2,"保存当前内容吗? ");
mvprintw(LINES-2,2," ");
mvprintw(LINES-1,2," \n");
refresh();
ans=getch();
if (ans=='Y' ||ans=='y')
{
mvprintw(LINES-3,2," ");
fp1 = fopen(filename,"wb");
if (fp1!=NULL){
int jg= putwin(mywins[nowwinid],fp1);
fclose(fp1);
if (jg==OK) mvprintw(LINES-1,2,"保存成功!\n");
}
mvprintw(LINES-3,2,"保存当前内容吗? ");
mvprintw(LINES-2,2,"是\n");
refresh();
}else
mvprintw(LINES-2,2,"否\n");
refresh();
break;
case KEY_F(9):
//读取存盘
mvprintw(LINES-3,2," ");
mvprintw(LINES-3,2,"读取保存内容吗? ");
mvprintw(LINES-2,2," ");
mvprintw(LINES-1,2," \n");
refresh();
ans=getch();
if (ans=='Y' ||ans=='y')
{
if (isExist(filename)) {
fp2 = fopen(filename,"rb");
if (fp2!=NULL){
WINDOW *newwin=getwin(fp2);
if (newwin!=NULL) {
WINDOW *temp=mywins[nowwinid];
mywins[nowwinid]=newwin;
delwin(temp);
PANEL *temppan=mypanels[nowwinid];
mypanels[nowwinid] = new_panel(mywins[nowwinid]);
del_panel(temppan);
set_panel_userptr(mypanels[0],mypanels[1]);
set_panel_userptr(mypanels[1],mypanels[2]);
set_panel_userptr(mypanels[2],mypanels[0]);
top = mypanels[nowwinid];
top_panel(top);
update_panels();
doupdate();
mvprintw(LINES-1,2,"读取成功!\n");
}
fclose(fp2);
}
}
mvprintw(LINES-3,2,"读取保存内容吗? ");
mvprintw(LINES-2,2,"是\n");
refresh();
}else
mvprintw(LINES-2,2,"否\n");
refresh();
break;
case KEY_F(12):
//删除某行
wdeleteln(mywins[nowwinid]);
winsertln(mywins[nowwinid]);
box(mywins[nowwinid],ACS_VLINE,ACS_HLINE);
break;
case KEY_DC:
//删除某字符
mvwprintw(mywins[nowwinid],y,x," ");
break;
default:
mvwprintw(mywins[nowwinid],y,x,"%c",c);
++x;
if (x>=width-1){
++y;
x=1;
}
if (y>=height-1){
y=1;
}
doupdate();
}
}
return 0;
}
dp@dp:~/cursestest % gcc -lncursesw -lpanel a.c -o mytest
dp@dp:~/cursestest % ./mytest
编写含有表单的程序,一般步骤如下:
1. 初始化并进入curses
2. 用new_field()函数创建表单域。你可以指定域的高度,宽度以及它在表单中的位
置。
3. 指定已创建的表单域所作用的表单,并用new_form()函数创建表单。
4. 用post_form()函数来递送表单,并刷新屏幕。
5. 用一个循环来处理用户请求,通过form_driver()函数对表单做相应的更新。
6. 用unpost_form()函数取消表单的递送。
7. 用free_form()函数释放已分配给表单的内存。
8. 用free_field()函数释放已分配给菜单项的内存。
9. 退出curses 模式
下面演示了表单的操作基础
#include <form.h>
int main()
{
FIELD *field[3];
FORM *my_form;
int ch;
/* 初始化curses */
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
/* 初始化表单域*/
field[0] = new_field(1, 10, 4, 18, 0, 0);
field[1] = new_field(1, 10, 6, 18, 0, 0);
field[2] = NULL;
/* 设置表单域*/
set_field_back(field[0],A_UNDERLINE); /* 为选项打印一条下滑线*/
field_opts_off(field[0],O_AUTOSKIP);
/* 在域(输入框)填满后光标不会自动跳到下一个表单域*/
set_field_back(field[1],A_UNDERLINE);
field_opts_off(field[1],O_AUTOSKIP);
/* 创建并递送表单*/
my_form = new_form(field);
post_form(my_form);
refresh();
mvprintw(4, 10, "name:");
mvprintw(6, 10, "age:");
refresh();
move(4,15);
/* 用循环获取用户请求,F12退出*/
while((ch = getch()) != KEY_F(12))
{
switch(ch)
{
case KEY_DOWN:
/* 跳至下一个表单域*/
form_driver(my_form,REQ_NEXT_FIELD);
/* 跳到当前缓冲的末尾*/
/* 精确地在输入最后一个后字符跳出这个表单域*/
form_driver(my_form,REQ_END_LINE);
break;
case KEY_UP:
/* 移动到前一个表单域*/
form_driver(my_form,REQ_PREV_FIELD);
form_driver(my_form,REQ_END_LINE);
break;
default:
/* 如果输入的是普通字符, 就把它打印出来*/
form_driver(my_form,ch);
break;
}
}
/* 取消表单并释放内存*/
unpost_form(my_form);
free_form(my_form);
free_field(field[0]);
free_field(field[1]);
endwin();
return 0;
}
dp@dp:~/cursestest % gcc -lncursesw -lform b.c -o mytest
dp@dp:~/cursestest % ./mytest
- C指针原理(67)-Ncurses-文本终端的图形
- C指针原理(44)-Ncurses-文本终端的图形
- C指针原理(52)-Ncurses-文本终端的图形
- C指针原理(53)-Ncurses-文本终端的图形
- C指针原理(54)-Ncurses-文本终端的图形
- C指针原理(56)-Ncurses-文本终端的图形
- C指针原理(57)-Ncurses-文本终端的图形
- C指针原理(58)-Ncurses-文本终端的图形
- C指针原理(59)-Ncurses-文本终端的图形
- C指针原理(60)-Ncurses-文本终端的图形
- C指针原理(61)-Ncurses-文本终端的图形
- C指针原理(62)-Ncurses-文本终端的图形
- C指针原理(63)-Ncurses-文本终端的图形
- C指针原理(64)-Ncurses-文本终端的图形
- C指针原理(65)-Ncurses-文本终端的图形
- C指针原理(66)-Ncurses-文本终端的图形
- Ncurses 命令行图形库
- ubuntu下ncurses如何禁用终端的快捷键
- Hibernate逍遥游记——(四)声明数据库事务
- 高通AR 的cloud研究
- IOS开发过程中Xcode编译错误以及运行时异常等问题记录
- 【C++基础学习】关于C++静态数据成员
- 通讯录
- C指针原理(67)-Ncurses-文本终端的图形
- Nginx+tomcat+Java
- Maven Scope取值的含义
- SVN常用命令说明
- 本机直接内存溢出
- 九度OJ 1019 简单计算器 -- 2006年浙江大学计算机及软件工程研究生机试真题
- MongoDB:mongodb在项目开发时的安全验证、分页查询操作
- adb server is out of date. killing...的解决办法
- 海量数据跨库比对方案总结