Linux ncurses库 创建界面类似qq窗口 实现聊天框和输入框收发消息 的代码
时间: 2024-05-02 08:19:32 浏览: 201
给窗口加边框-LinuxGUI编程-Ncurses
以下是一个简单的示例代码,使用ncurses库创建了一个类似QQ窗口的聊天界面,可以实现收发消息:
```c++
#include <ncurses.h>
#include <string.h>
#define MAX_MSG_LEN 256 // 最大消息长度
class ChatWindow {
public:
ChatWindow(int width, int height, int startx, int starty) {
win = newwin(height, width, starty, startx); // 创建窗口
scrollok(win, true); // 允许窗口滚动
box(win, 0, 0); // 给窗口加上边框
wrefresh(win); // 刷新窗口
msg_win = subwin(win, height-2, width-2, starty+1, startx+1); // 创建消息显示窗口
input_win = subwin(win, 3, width-2, starty+height-4, startx+1); // 创建输入窗口
scrollok(msg_win, true); // 允许消息窗口滚动
wrefresh(msg_win); // 刷新消息窗口
wrefresh(input_win); // 刷新输入窗口
}
~ChatWindow() {
delwin(msg_win); // 删除消息窗口
delwin(input_win); // 删除输入窗口
delwin(win); // 删除主窗口
}
void add_msg(const char* msg) {
wprintw(msg_win, "%s\n", msg); // 在消息窗口中添加一条消息
wrefresh(msg_win); // 刷新消息窗口
}
void get_input(char* buf) {
echo(); // 显示用户输入的字符
curs_set(1); // 显示光标
mvwgetnstr(input_win, 1, 1, buf, MAX_MSG_LEN); // 从输入窗口中获取用户输入的消息
noecho(); // 隐藏用户输入的字符
curs_set(0); // 隐藏光标
}
private:
WINDOW* win; // 主窗口
WINDOW* msg_win; // 消息显示窗口
WINDOW* input_win; // 输入窗口
};
int main() {
initscr(); // 初始化ncurses
cbreak(); // 禁用行缓冲
noecho(); // 关闭回显
curs_set(0); // 隐藏光标
int rows, cols;
getmaxyx(stdscr, rows, cols); // 获取屏幕大小
ChatWindow chat_win(cols/2, rows/2, cols/4, rows/4); // 创建聊天窗口
char msg[MAX_MSG_LEN];
while (true) {
chat_win.get_input(msg); // 获取用户输入的消息
chat_win.add_msg(msg); // 在聊天窗口中添加一条消息
}
endwin(); // 关闭ncurses
return 0;
}
```
阅读全文