该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。

本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大家分享:

主界面程序gmaxtrix.c

#include

#include"client_socket.h"

#define MAX_BUFFER 1024

static GtkWidget *IP_entry;

static GtkWidget *port_entry;

static gint sockfd;

static gint tag;

gchar buffer[MAX_BUFFER];

void g_show_alarm_dialog(const gchar *message){

GtkWidget *dialog;

dialog = gtk_message_dialog_new(NULL,

GTK_DIALOG_DESTROY_WITH_PARENT,

GTK_MESSAGE_WARNING,

GTK_BUTTONS_OK,

"%s",message);

gtk_window_set_title(GTK_WINDOW(dialog),"警告");

gtk_dialog_run(GTK_DIALOG(dialog));

gtk_widget_destroy(dialog);

}

void g_client_send(GtkWidget *widget, gpointer textbuffer){

if (sockfd > 0){

client_send(sockfd, gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(textbuffer)), gtk_entry_buffer_get_bytes(GTK_ENTRY_BUFFER(textbuffer)));

}else{

g_show_alarm_dialog("未连接到中控主机");

}

}

void g_client_recv(gpointer data, gint source, GdkInputCondition condition){

gint count = client_recv(source, buffer, MAX_BUFFER);

buffer[count] = 0;

GtkTextIter iter;

gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(data),&iter);

gtk_text_buffer_insert(GTK_TEXT_BUFFER(data),&iter,buffer,-1);

}

void g_client_connect(GtkWidget *widget, gpointer date){

if (sockfd > 0){

client_close(sockfd);

gtk_button_set_label(GTK_BUTTON(widget),"连接");

gdk_input_remove(tag);

}else{

sockfd = client_connect(gtk_entry_get_text(GTK_ENTRY(IP_entry)),atoi(gtk_entry_get_text(GTK_ENTRY(port_entry))));

gtk_button_set_label(GTK_BUTTON(widget),"断开");

tag = gdk_input_add(sockfd, GDK_INPUT_READ, g_client_recv,date);

}

}

int main(int argc, char *argv[]){

gtk_init(&argc, &argv);

GtkWidget *window;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_set_size_request(window, 260, 250);

gtk_container_set_border_width(GTK_CONTAINER(window),5);

GtkWidget *vbox;

vbox = gtk_vbox_new(FALSE,1);

gtk_container_add(GTK_CONTAINER(window),vbox);

GtkWidget *hbox1;

hbox1 = gtk_hbox_new(FALSE,1);

gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE ,0);

GtkWidget *table = gtk_table_new(2,2,FALSE);

gtk_box_pack_start(GTK_BOX(hbox1), table, TRUE , TRUE , 0);

GtkWidget *IP_label = gtk_label_new("地址:");

gtk_table_attach_defaults(GTK_TABLE(table),IP_label,0,1,0,1);

IP_entry = gtk_entry_new();

gtk_table_attach_defaults(GTK_TABLE(table),IP_entry,1,2,0,1);

GtkWidget *port_label = gtk_label_new("端口:");

gtk_table_attach_defaults(GTK_TABLE(table),port_label,0,1,1,2);

port_entry = gtk_entry_new();

gtk_table_attach_defaults(GTK_TABLE(table),port_entry,1,2,1,2);

GtkWidget *connect_button = gtk_button_new_with_label("连接");

gtk_box_pack_start(GTK_BOX(hbox1), connect_button, TRUE, TRUE ,0);

GtkWidget *hseparator = gtk_hseparator_new();

gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0);

GtkWidget *hbox2;

hbox2 = gtk_hbox_new(FALSE,1);

gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE ,0);

GtkWidget *send_entry = gtk_entry_new();

gtk_box_pack_start(GTK_BOX(hbox2), send_entry, TRUE, TRUE ,0);

GtkWidget *send_button = gtk_button_new_with_label("发送");

gtk_box_pack_start(GTK_BOX(hbox2), send_button, TRUE, TRUE ,0);

g_signal_connect(send_button, "clicked", G_CALLBACK(g_client_send), gtk_entry_get_buffer(GTK_ENTRY(send_entry)));

GtkWidget *recv_text = gtk_text_view_new();

gtk_box_pack_start(GTK_BOX(vbox), recv_text, TRUE, TRUE, 0);

g_signal_connect(connect_button, "clicked", G_CALLBACK(g_client_connect), gtk_text_view_get_buffer(GTK_TEXT_VIEW(recv_text)));

gtk_widget_show_all(window);

gtk_main();

return 0;

}

后台网络通迅模型接口声明client_socket.h

#ifndef CLIENT_SOCKET_H

#define CLIENT_SOCKET_H

int client_connect(const char *IP, const int port);

void client_close(int sockfd);

void client_send(int sockfd,const unsigned char *buffer, const size_t count);

size_t client_recv(int sockfd,unsigned char *buffer,size_t count);

#endif

后台网络通迅模型实现client_socket.c(采用POSIX接口,WIN下需改为win32API接口)

#include

#include

#include

#include

#include

#include

#include "client_socket.h"

int client_connect(const char *IP, const int port){

static struct sockaddr_in servaddr;

int sockfd = socket(AF_INET,SOCK_STREAM,0);

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

inet_pton(AF_INET, IP, &servaddr.sin_addr);

servaddr.sin_port = htons(port);

connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

return sockfd;

}

void client_close(int sockfd){

close(sockfd);

}

void client_send(int sockfd,const unsigned char *buffer, const size_t count){

send(sockfd,buffer,count,0);

}

size_t client_recv(int sockfd,unsigned char *buffer,size_t count){

return recv(sockfd,buffer,count,0);

}

编译脚本makefile

gmaxtrix: gmaxtrix.o client_socket.o

gcc gmaxtrix.o client_socket.o -o gmaxtrix `pkg-config --cflags --libs gtk+-2.0`

gmaxtrix.o: gmaxtrix.c client_socket.h

gcc -c gmaxtrix.c `pkg-config --cflags --libs gtk+-2.0`

client_socket.o: client_socket.h client_socket.c

gcc -c client_socket.c `pkg-config --cflags --libs gtk+-2.0`

clean:

@echo "cleanning project"

-rm gmaxtrix *.o

@echo "clean completed"

如何用C语言编辑窗口界面,「分享」C语言如何编写图形界面相关推荐

  1. c语言 显示 图形界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  2. 用c语言开发图形界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  3. c语言编写点餐系统的图形界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  4. c语言转图形化,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  5. 用c语言编写界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  6. c语言编写图形登录窗口,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  7. c 语言 怎样编写图形窗口,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  8. c语言图形界面设定,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  9. c语言界面怎么加图形,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

最新文章

  1. Android RxJava 2.0中backpressure(背压)概念的理解
  2. Tensorflow Lite Android Demo App
  3. 在linux下实现拓扑排序,数据结构——有向图(拓扑排序算法)
  4. Java JDK11快速下载地址
  5. C#开启线程的四种方式
  6. 第三章 PX4-Pixhawk-SPI底层驱动解析
  7. ARM(IMX6U)裸机C语言版本LED驱动实验(汇编进入处理器SVC模式、SP堆内存、跳转main函数、链接起始地址)
  8. TCP/IP的初步理解,TCP和UDP的区别
  9. Ubuntu图形界面更改软件下载源为清华镜像站以及解决等待apt退出的问题
  10. 15. Window clearTimeout() 方法
  11. Java Web开发实战(一)—JDK安装及环境变量配置
  12. Html鼠标右键菜单代码
  13. c4d打开没反应_(图文+视频)C4D野教程:总结四种制作漩涡样条的方法
  14. Expected Array got Object
  15. 管理小故事100例1
  16. 百度云语音合成 Python SDK
  17. P1500 丘比特的烦恼
  18. 测试硬盘软件hd不能结束进程,终于解决了HD TUNE以及所有其他硬盘检测工具都不能使用的情况。。...
  19. php计算问卷分数,php 问卷调查结果统计
  20. 什么是MEID号如何申请MEID,A0、A1、A2以及99开头的MEID号的区别?

热门文章

  1. C ++ 类 | 类与数组(Array)_4
  2. 重新命名的linux命令,Linux 重命名命令自制详细介绍
  3. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志
  4. 查询引擎: SQL反解析(json2sql)(附源码)
  5. 初学计算机语言者(C语言,C++,java,pytion,C#)
  6. linux 内存泄露检测工具——valgrind
  7. MFC中常见控件的操作
  8. promise用法_图解 Promise 实现原理(一)—— 基础实现
  9. springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es
  10. 矩形法_教程 | 三个案例教会你大师都爱用的矩形造字法!