#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简单的一个多窗体程序的更多相关文章

  1. 第一个Python窗体程序

    新建ui_MainWindow.py文件 # encoding: UTF-8 # Qt相关和十字光标 from PyQt4.QtGui import * from PyQt4.QtCore impor ...

  2. 学习java随笔第十一篇:java窗体程序

    要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10 ...

  3. MFC窗体程序中添加调试控制台

    在编写复杂程序的过程中,我们经常需要将一些信息输出到文件或者屏幕上.较控制台应用程序,MFC窗体程序要显得麻烦一些! 下面有2种方法来实现为MFC窗体程序添加调试控制台,方便程序员调试程序和了解当前程 ...

  4. 实现一个简单的侧边导航Winform程序框架

    目录 简介 实现导航面板 实现方法 使用方法 实现标题栏 窗体拖拽及最大化 自定义窗体按钮 标题显示 按钮设置 实现状态栏 整体使用 参考文章 简介 每次新项目都要想着界面怎么设计好,但想来想去上位机 ...

  5. 一个简单的c# 贪吃蛇程序

    一个简单的c#贪吃蛇程序 程序分为界面设计和程序设计:界面设计和程序设计均参考了一些游戏实例,但是所有代码内容是本人编写. 由于看到别人写的程序并没有署名,这里的署名全部都是csdn官网. 游戏界面设 ...

  6. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  7. 用nodejs搭建一个简单的服务监听程序

    作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...

  8. (1)风色从零单排《C++ Primer》 一个简单的c++程序

    从零单排<C++ Primer> --(1)一个简单的c++程序 本次学习收获 0.写在前面 风色以前上过C++的课程,然而当时并没有认真去学,基本不能使用c++来作项目开发. 这次又一次 ...

  9. VS2015 建立一个C++的MFC简易窗体程序项目

    一开始建立的窗体工程都是带很多窗口,而且自己拉到窗体的控件,一调试就看不到了,是因为新建立工程项目时勾选了太多其他的了,这里记录分享一下建立一个单纯的窗体程序项目步骤给有需要的人也可以学习. 第一步: ...

随机推荐

  1. [THUWC2017][bzoj5020] 在美妙的数学王国中畅游 [LCT+泰勒展开]

    题面 LOJ传送门 思路 这里很重要 它提示我们,把给定的三个函数泰勒展开,并用LCT维护每一项泰勒展开式的值,维护十几项就满足了题目的精度要求 我们考虑一个函数在0位置的泰勒展开 $f(x)=\su ...

  2. cookie登录

    #coding:utf-8 import tornado.httpserver import tornado.ioloop import tornado.options import tornado. ...

  3. CCAction详解

    http://blog.csdn.net/bailongvip/article/details/7895370 转载自雨松MOMO程序研究院 上一章我们了解了CCNode的实现原理,这次我跟大家探讨一 ...

  4. create a large size empty file to measure transfer speed

    OS : Windows open cmd fsutil file createnew file_name 1073741824 // 1GB fsutil file createnew file_n ...

  5. windows 添加自助白名单

    由于公司分部用的是动态IP,又需要用到总部的OA系统,OA完全开放对外不安全,所以写了这个工具 项目地址 https://github.com/cainiaoit/Windows-firewall-s ...

  6. python实现并发获取html的几种方式

    1.线程池 from concurrent.futures import ThreadPoolExecutor import requests from fake_useragent import U ...

  7. bash shell 文本文件操作

    一.打开文本文档,查看文本的内容,我们最直观的方式就是用编辑器,并且可以使用vi内部的查找命令查找[参见Vim文字编辑] vi test.txt#使用vi打开当前目录下的test.txt文本 二.总结 ...

  8. Linux使用命令记录

    1.对一个文件夹中所有的文件进行修改权限: • chmod –R 777 aa (- R 递归式改变指定目录及其所目录文件拥者) • 目录/his及其所文件目录,chown - R www.www / ...

  9. python 去除列表重复元素方法汇总

    1.使用set集合,虽然去除掉重复元素,但是顺序改变了 耗时约4.0*10^-5 s A = ['a','b','X','a','b','G'] B = list(set(A)) print(A)[' ...

  10. React Native解决Android的WebView无法执行injectedJavaScript代码

    需求 在用WebView组件写一个东西,要求功能:打开web后进行js代码注入. 开发 代码很简单,示例: const js = ` alert(1); alert(2); `; <WebVie ...