ncurses简单的一个多窗体程序
2024-08-29 17:45:45
#include <ncurses.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
void* head_refresh(void *arg);
void* input_refresh(void *arg);
void* output_refresh(void *arg);
void* right_refresh(void *arg);
class window
{
friend void* head_refresh(void *arg);
friend void* input_refresh(void *arg);
friend void* output_refresh(void *arg);
friend void* right_refresh(void *arg);
public:
window()
{
initscr();
getmaxyx(stdscr,y,x);
}
void create_head()
{
head_window = newwin(4,x,0,0);
box(head_window,'.','.');
mvwprintw(head_window,4/2,x/3,"|Welcome to here|");
}
void _refresh(WINDOW *win)
{
wrefresh(win);
wgetch(win);
}
void create_input()
{
input_window = newwin(y-5,x/2,5,0);
box(input_window,'.','.');
mvwprintw(input_window,1,0,"input:");
}
void create_output()
{
output_window = newwin((y-5)/2,x/2,5+(y-5)/2+1,x/2);
box(output_window,'.','.');
mvwprintw(output_window,1,0,"output:");
}
void create_right()
{
right_window = newwin((y-5)/2,x/2,5,x/2);
box(right_window,'.','.');
mvwprintw(right_window,1,0,"friend:");
}
~window()
{
endwin();
}
private:
WINDOW *head_window;
WINDOW *input_window;
WINDOW *output_window;
WINDOW *right_window;
int x;
int y;
};
void* head_refresh(void *arg)
{
window *win = (window*)arg;
win->_refresh(win->head_window);
return NULL;
}
void* input_refresh(void *arg)
{
window *win = (window*)arg;
win->_refresh(win->input_window);
return NULL;
}
void* output_refresh(void *arg)
{
window *win = (window*)arg;
win->_refresh(win->output_window);
return NULL;
}
void* right_refresh(void *arg)
{
window *win = (window*)arg;
win->_refresh(win->right_window);
return NULL;
}
int main()
{
window win;
win.create_head();
win.create_input();
win.create_output();
win.create_right();
pthread_t head_id,input_id,output_id,right_id;
pthread_create(&head_id,NULL,head_refresh,(void *)&win);
pthread_create(&input_id,NULL,input_refresh,(void *)&win);
pthread_create(&output_id,NULL,output_refresh,(void *)&win);
pthread_create(&right_id,NULL,right_refresh,(void *)&win);
//由于终端无法同步刷新。所以使用多个线程来进行刷新,能够满足
//同一时候显示多个窗体的需求。
pthread_join(head_id,NULL);
pthread_join(input_id,NULL);
pthread_join(output_id,NULL);
pthread_join(right_id,NULL);
getch();
return 0;
}
最新文章
- 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
- 内存VSS/RSS/PSS/USS名词解释
- Guava学习笔记(2):Preconditions优雅的检验参数
- setTimeout调用带参数的函数的方法
- 获取MS SQL TABLE列名列表
- C# Graphic 绘制圆、三角形、椭圆、图片
- java类型转化之Hbase ImmutableBytesWritable类型转String
- Ubuntu14.04下Python3.4启动IDLE
- UML应用:业务内涵的分析抽象&;amp;表达
- S2_SQL_第三章
- NOIP 2018 大翻车记
- ansible copy 模块详解
- SAP 打印自动导出PDF本地文件(自己做的例子)
- STM32 f407 温湿度采集报警
- POJ2270&;&;Hdu1808 Halloween treats 2017-06-29 14:29 40人阅读 评论(0) 收藏
- 数组filter()参数详解,巧用filter()数组去重
- Linux命令之du
- OpenCV学习(35) OpenCV中的PCA算法
- cmder小技巧
- Vue2.0项目实战语法