ncurses简单的一个多窗体程序
#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;
}
ncurses简单的一个多窗体程序的更多相关文章
- 第一个Python窗体程序
新建ui_MainWindow.py文件 # encoding: UTF-8 # Qt相关和十字光标 from PyQt4.QtGui import * from PyQt4.QtCore impor ...
- 学习java随笔第十一篇:java窗体程序
要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10 ...
- MFC窗体程序中添加调试控制台
在编写复杂程序的过程中,我们经常需要将一些信息输出到文件或者屏幕上.较控制台应用程序,MFC窗体程序要显得麻烦一些! 下面有2种方法来实现为MFC窗体程序添加调试控制台,方便程序员调试程序和了解当前程 ...
- 实现一个简单的侧边导航Winform程序框架
目录 简介 实现导航面板 实现方法 使用方法 实现标题栏 窗体拖拽及最大化 自定义窗体按钮 标题显示 按钮设置 实现状态栏 整体使用 参考文章 简介 每次新项目都要想着界面怎么设计好,但想来想去上位机 ...
- 一个简单的c# 贪吃蛇程序
一个简单的c#贪吃蛇程序 程序分为界面设计和程序设计:界面设计和程序设计均参考了一些游戏实例,但是所有代码内容是本人编写. 由于看到别人写的程序并没有署名,这里的署名全部都是csdn官网. 游戏界面设 ...
- Django 学习笔记之六 建立一个简单的博客应用程序
最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...
- 用nodejs搭建一个简单的服务监听程序
作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...
- (1)风色从零单排《C++ Primer》 一个简单的c++程序
从零单排<C++ Primer> --(1)一个简单的c++程序 本次学习收获 0.写在前面 风色以前上过C++的课程,然而当时并没有认真去学,基本不能使用c++来作项目开发. 这次又一次 ...
- VS2015 建立一个C++的MFC简易窗体程序项目
一开始建立的窗体工程都是带很多窗口,而且自己拉到窗体的控件,一调试就看不到了,是因为新建立工程项目时勾选了太多其他的了,这里记录分享一下建立一个单纯的窗体程序项目步骤给有需要的人也可以学习. 第一步: ...
随机推荐
- 第十四篇:JavaScript
本篇内容 简介 使用 DOM 一. 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. Ja ...
- DateBase -- Rising Temperature
Question: Given a Weather table, write a SQL query to find all dates' Ids with higher temperature co ...
- registry --------->仓库 ----------------->镜像
registry --------->仓库 ----------------->镜像 本地镜像都保存在宿主机下 : /var/lib/docker/containers 镜像从仓库下载下来 ...
- Tomcat学习笔记(十)
StandardWrapper容器 Context容器包含一个或者多个Wrapper实例,每个Wrapper实例表示一个具体的servlet定义. 方法调用序列 具体过程 (1)连接器创建reques ...
- 华中农业大学第四届程序设计大赛网络同步赛 J
Problem J: Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1766 Solved: 299[Subm ...
- 转:ExecutorService
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过 Executor来启动线程比用Thread的start()更好.在新特征 ...
- 插件安装:包管理器——Package Control
首先,按CTRL+`,打开控制台 粘贴下面的代码,之后回车 如果是sublime3 ? 1 import urllib.request,os,hashlib; h = '7183a2d3e96f1 ...
- [ CodeVS冲杯之路 ] P1294
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1294/ 随手一打就是这么漂亮的全排列,想当年我初一还是初二的时候,调了1个多小时才写出来(蒟蒻一枚) 直接DFS每次枚 ...
- linux select函数详解【转】
转自:http://www.cnblogs.com/ccsccs/articles/4224253.html 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数 ...
- sh脚本变量赋值时同时执行命令时的环境问题
在v2ex看到一个问题: 允许在一个命令之前立即发生一个或多个变量赋值,这些赋值为跟随着的命令更改环境变量,这个赋值的影响是暂时的. 那为什么: int=100 int=10 echo $(($int ...