//chat_window.h
#pragma once
#include<iostream>
#include<string.h>
#include<string>
#include<ncurses.h>
#include<pthread.h>
#include<unistd.h>
#include"comm.h"
//#define _SIZE_ 1024
using namespace std;
class chat_window
{
public:
chat_window();
void put_str_to_win(WINDOW* _win,int _y,int _x,const string& msg);
string get_str_from_win(WINDOW* _win);
void create_header();
void create_output();
void create_friends_list();
void create_input();
~chat_window();
// WINDOW* create_newwin(int _h,int _w,int _y,int _x);
void fflush_win(WINDOW* _win);
void clear_win_line(WINDOW* _win,int begin,int num);
public:
WINDOW* header;
WINDOW* output;
WINDOW* friends_list;
WINDOW* input;
pthread_mutex_t mutex;
};
//chat_window.cpp
#include"chat_window.h"
chat_window::chat_window()
{
pthread_mutex_init(&mutex,NULL);
initscr();//init screen
curs_set(0);
}
void chat_window::put_str_to_win(WINDOW* _win,int _y,int _x,const string& msg)
{
pthread_mutex_lock(&mutex);
mvwaddstr(_win,_y,_x,msg.c_str());//mv window add str :C function
pthread_mutex_unlock(&mutex);
}
string chat_window::get_str_from_win(WINDOW* _win)
{
char buf[_SIZE_];
memset(buf,'\0',sizeof(buf));
wgetnstr(_win,buf,sizeof(buf)-1);
return buf;
}
void chat_window::create_header()
{
int _y=0;//row
int _x=0;//col
int _h=LINES/5;
int _w=COLS;
header=newwin(_h,_w,_y,_x);//create new window
}
void chat_window::create_output()
{
int _y=LINES/5;//row
int _x=0;//col
int _h=(LINES*3)/5;
int _w=(COLS*4)/5;
output=newwin(_h,_w,_y,_x);//create new window
}
void chat_window::create_friends_list()
{
int _y=LINES/5;//row
int _x=(COLS*4)/5;//col
int _h=(LINES*3)/5;
int _w=COLS/5;
friends_list=newwin(_h,_w,_y,_x);//create new window
}
void chat_window::create_input()
{
int _y=(LINES*4)/5;//row
int _x=0;//col
int _h=LINES/5;
int _w=COLS;
input=newwin(_h,_w,_y,_x);//create new window
}
chat_window::~chat_window()
{
pthread_mutex_destroy(&mutex);
delwin(header);//destroy window
delwin(output);//destroy window
delwin(friends_list);//destroy window
delwin(input);//destroy window
endwin();
}
//WINDOW* chat_window::create_newwin(int _h,int _w,int _y,int _x)
//{
// WINDOW* _win=newwin(_h,_w,_y,_x);
// box(_win,0,0u);
// return _win;
//}
void chat_window::fflush_win(WINDOW* _win)
{
pthread_mutex_lock(&mutex);
box(_win,0,0);
wrefresh(_win);
pthread_mutex_unlock(&mutex);
}
void chat_window::clear_win_line(WINDOW* _win,int begin,int num)
{
while(num-- > 0)
{
wmove(_win,begin++,0);//0 is col
wclrtoeol(_win);//window clear to eof last
}
}
//void* draw_header(void* arg)
//{
// chat_window* _win=(chat_window*)arg;
// _win->create_header();
// string _line="HELLO WORLD";
// int _max_y;
// int _max_x;
// getmaxyx(_win->header,_max_y,_max_x);
//
// int _y=_max_y/2;
// int _x=1;
// while(1)
// {
// _win->put_str_to_win(_win->header,_y,_x,_line);
// _win->fflush_win(_win->header);
// usleep(10000);
// _x++;
// _x%=_max_x;
// _win->clear_win_line(_win->header,_y,2);
// _win->fflush_win(_win->header);
// usleep(10000);
// }
//
//}
//void* draw_output(void* arg)
//{
// chat_window* _win=(chat_window*)arg;
// _win->create_output();
// while(1)
// {
// usleep(1000000);
// _win->fflush_win(_win->output);
// }
//}
//void* draw_friends_list(void* arg)
//{
// chat_window* _win=(chat_window*)arg;
// _win->create_friends_list();
// while(1)
// {
// usleep(1000000);
// _win->fflush_win(_win->friends_list);
// }
//}
//void* draw_input(void* arg)
//{
// chat_window* _win=(chat_window*)arg;
// _win->create_input();
// string _line="please input#";
// int _max_y;
// int _max_x;
// getmaxyx(_win->input,_max_y,_max_x);
// string _msg;
// while(1)
// {
// usleep(1000000);
// _win->put_str_to_win(_win->input,1,1,_line);
// _win->fflush_win(_win->input);
// _msg=_win->get_str_from_win(_win->input);
// _win->clear_win_line(_win->input,1,1);
// usleep(1000);
// _win->put_str_to_win(_win->input,1,1,_line);
// _win->fflush_win(_win->input);
// }
//}
//int main()
//{
// chat_window _wi;
// pthread_t th,to,tf,ti;
// pthread_create(&th,NULL,draw_header,(void*)&_wi);
// pthread_create(&to,NULL,draw_output,(void*)&_wi);
// pthread_create(&tf,NULL,draw_friends_list,(void*)&_wi);
// pthread_create(&ti,NULL,draw_input,(void*)&_wi);
// pthread_join(th,NULL);
// pthread_join(to,NULL);
// pthread_join(tf,NULL);
// pthread_join(ti,NULL);
// return 0;
//}
//Makefile
chat_window:chat_window.cpp
g++ -o $@ $^ -lncurses -lpthread
.PHONY:clean
clean:
rm -f chat_window
转载于:https://blog.51cto.com/10541556/1812839