Linux curses 总结三(窗口)

本文详细介绍了Linux curses库中的窗口操作,包括WINDOWS结构、如何创建和销毁窗口,以及一系列通用函数的使用。通过实例代码展示如何进行窗口移动和更新,帮助读者深入理解curses库在终端界面开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. WINDOWS结构
  2. 创建和销毁窗口
  3. 通用函数
  4. 一个小栗子

WINDOWS结构

 一个curses程序不仅仅只有一个窗口,stdscr就是curses程序的默认窗口,stdscr就是特殊的WINDOWS结构

创建和销毁窗口

函数名返回值作用
newwinWINDOW *创建窗口
delwinint销毁窗口

通用函数

  前面已经学习了对strscr的操作函数 <addch printw  refresh box insch delch eras clrtobot ...>这些函数在应用于窗口是也有相类似的函数
  w--->用于窗口
  mv--->用于光标移动
  mvw---->用于窗口的光标移动
函数名返回值参数
addchintchar
waddchintWINDOW*, char
mvaddchintint,int, char
mvwaddchintWINDOW*,int,int
printwintchar,…
wprintwintWINDOW*, char,…
mvprintwintint,int, char,…
mvwprintwintWINDOW*,char,int,int,…

移动和更新窗口

函数名返回值作用
mvwinint移动一个窗口
wrefreshint对指定窗口刷新
wclearint对指定窗口清除
weraseint清除屏幕
touchwinint通知curses函数库窗口改变
srcollokint窗口卷屏幕(字符在当前窗口排不下了就会上移)
srcollint

一个小栗子

#include<stdio.h>
#include<stdlib.h>
#include<curses.h>


int main(){

 WINDOW *new_window_ptr;
 WINDOW *popup_window_ptr;
 int x_loop;
 int y_loop;
 char a_letter = 'a';

 initscr();
 move(5,5);
 printw("%s","Testing multiple windows\n");
 printw("LINES =%d",LINES);
 printw("COLS=%d",COLS);
 refresh();
 sleep(2);

 for(y_loop =0;y_loop<LINES-1;y_loop++){
   for(x_loop=0;x_loop<COLS-1;x_loop++){
         // mvwaddch(stdscr,y_loop,x_loop,a_letter);
         addch(a_letter);
         a_letter++;
         if(a_letter>'z') a_letter ='a';
        }
}
 refresh();
 sleep(2);

 new_window_ptr = newwin(10,20,5,5);
 mvwprintw(new_window_ptr,2,2,"%s","hello world");
 mvwprintw(new_window_ptr,5,2,"%s","Notice how very long line wrap inside in window");
 wrefresh(new_window_ptr);
 sleep(2);

a_letter ='0';
 for(y_loop =0;y_loop<LINES-1;y_loop++){
   for(x_loop=0;x_loop<COLS-1;x_loop++){
         mvwaddch(stdscr,y_loop,x_loop,a_letter);
         a_letter++;
         if(a_letter>'9') a_letter ='0';
        }
}
  refresh();
  sleep(2);

  touchwin(new_window_ptr);
  //touchwin告诉new_window_ptr指向的窗口已经发生变化,
如果不不使用这个,下面语句不能使他重新绘制 
  wrefresh(new_window_ptr);
  sleep(2);

popup_window_ptr = newwin(10,20,8,8);
  box(popup_window_ptr,'|','-');
  mvwprintw(popup_window_ptr,5,2,"%s","pop up window");
  wrefresh(popup_window_ptr);
  wrefresh(new_window_ptr);
  sleep(2);

  touchwin(new_window_ptr);
  wrefresh(new_window_ptr);
  sleep(2);
  wclear(new_window_ptr);
  wrefresh(new_window_ptr);
  sleep(2);

  delwin(new_window_ptr);
  touchwin(popup_window_ptr);
  wrefresh(popup_window_ptr);
  sleep(2);

delwin(popup_window_ptr);
  touchwin(stdscr);
  refresh();
  sleep(2);


 endwin();
 exit(EXIT_SUCCESS);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值