📄 myviewwin1.c~
字号:
#include <gtk/gtk.h>#include <strings.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <time.h>struct fileinfo{ char * tiaomu; struct fileinfo *next;};struct fileinfo * list(char *);void printout(char *,char *);/*void printout(char *dir,char *name){ int i,j; char perms[10]; struct stat sbuf; char newname[1024]; sprintf(newname,"%s/%s",dir,name); stat(newname,&sbuf); printf("%5d KB",(sbuf.st_size+1024-1)/1024); printf("%3d个(uid)%5d(gid)%5d",sbuf.st_nlink,sbuf.st_uid,sbuf.st_gid); printf("(size)%7d%.20s",sbuf.st_size,ctime(&sbuf.st_mtime)); printf("%s\n",name);}*/struct fileinfo * list(char * name){ DIR *dp; struct dirent *dir; struct fileinfo *dir_node; struct fileinfo *head=NULL; if((dp=opendir(name))==NULL) sprintf(stderr,"%s:cannt open.\n",name); while((dir=readdir(dp))!=NULL) { dir_node = (struct fileinfo *)malloc(sizeof(struct fileinfo)); dir_node -> tiaomu = dir -> d_name; dir_node -> next = head; head = dir_node; //printout(name,dir->d_name); } close(dp); return head;}/* 必须的基本回调 */static void print_hello( GtkWidget *w, gpointer data ){ g_message ("Hello, World!\n");}gint delete( GtkWidget *widget, GtkWidget *event, gpointer data ){ gtk_main_quit (); return FALSE;}/* 这是用来生成新菜单的 GtkItemFactoryEntry 结构。 第一项:菜单路径。下划线后的字母指出菜单打开时 的快捷键。 第二项:这个条目的快捷键 第三项:回调函数。 第四项:回调动作。这个改变被调用的函数的参数。默认是0. 第五项:项类型,用来定义它是哪种项, 这里是可能的值: NULL -> "<Item>" "" -> "<Item>" "<Title>" -> 创建一个标题(title)项 "<Item>" -> 创建一个简单(simple)项 "<CheckItem>" -> 创建一个检查(check)项 "<ToggleItem>" -> 创建一个开关(toggle)项 "<RadioItem>" -> 创建一个选择(radio)项 <path> -> 选择项连接到的路径 "<Separator>" -> 创建一个分隔线(separator) "<Branch>" -> 创建一个包含子项的项(可选) "<LastBranch>" -> 创建一个右对齐的分枝(branch)*/static GtkItemFactoryEntry menu_items[] = { {"/监视器(_M)", NULL,NULL,0,"<Branch>" }, {"/监视器(_M)/退出(_Q)", "<control>Q",gtk_main_quit,0,NULL}, {"/编辑(_E)", NULL,NULL,0,"<Branch>" }, {"/编辑(_E)/停止进程(_S)", "<control>S",print_hello,0,NULL}, { "/编辑(_E)/继续进程(_C)", "<control>C", print_hello,0,NULL }, { "/编辑(_E)/sep1",NULL,NULL, 0, "<Separator>" }, { "/编辑(_E)/结束进程(_P)", "<control>P",print_hello,0,NULL }, { "/编辑(_E)/杀死进程(_K)", "<control>K",print_hello,0,NULL }, { "/编辑(_E)/sep1",NULL, NULL, 0, "<Separator>" }, { "/编辑(_E)/更改优先级(_C)", "<control>R",print_hello, 0, NULL }, { "/编辑(_E)/sep1", NULL, NULL, 0, "<Separator>" }, { "/编辑(_E)/首选项(_N)", NULL, NULL, 0, NULL }, { "/查看(_V)", NULL, NULL, 0, "<Branch>" }, { "/查看(_V)/活动的进程(_A)", NULL, NULL, 0, NULL }, { "/查看(_V)/全部进程(_L)", NULL, NULL, 0, NULL }, { "/查看(_V)/我的进程(_Y)", NULL, NULL, 0, NULL }, { "/查看(_V)/sep1", NULL, NULL, 0, "<Separator>" }, { "/查看(_V)/依赖关系(_D)", "<control>D", print_hello, 0, NULL }, { "/查看(_V)/sep1", NULL, NULL, 0, "<Separator>" }, { "/查看(_V)/隐藏进程(_H)", "<control>H", print_hello, 0, NULL }, { "/查看(_V)/隐藏的进程(_H)", "<control>P", print_hello, 0, NULL }, { "/查看(_V)/sep1", NULL, NULL, 0, "<Separator>" }, { "/查看(_V)/内存镜像(_M)", "<control>M", print_hello, 0, NULL }, { "/查看(_V)/打开的文件(_F)", "<control>F", print_hello, 0, NULL }, { "/帮助(_H)", NULL, NULL, 0, "<LastBranch>" }, { "/帮助(_H)/关于", "F" , print_hello, 0, NULL }, { "/帮助(_H)/内容", NULL, print_hello, 0, NULL },};void get_main_menu( GtkWidget *window, GtkWidget **menubar ){ GtkItemFactory *item_factory; GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); accel_group = gtk_accel_group_new (); /* 这个函数初始化套件。 参数1:菜单类型 - 可以是GTK_TYPE_MENU_BAR, GTK_TYPE_MENU, 或GTK_TYPE_OPTION_MENU。 参数2:菜单路径。 参数3:指向一个gtk_accel_group的指针。套件在生成菜单时设置 好加速表(accelerator table)。 */ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); /* 这个函数生成菜单项。把数组里项的数量,数组自身,和菜单项的任 意回调数据依次传递给套件。 */ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); /* 把新的加速组绑定到窗口。 */ gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) /* 最后,返回套件已经创建的菜单栏。 */ *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}/* 创建一个"信息"列表 */GtkWidget * create_list(struct fileinfo *file ){ int i; GtkListStore * model; GtkTreeIter iter; GtkCellRenderer *cell; GtkTreeViewColumn *column; GtkWidget *tree_view; GtkWidget *scrolled_window; struct fileinfo *fileline; /* 创建一个新的滚动窗口(scrolled window),只有需要时,滚动条才出现 */ scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); model = gtk_list_store_new (1, G_TYPE_STRING); tree_view = gtk_tree_view_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model)); gtk_widget_show (tree_view); /* 在窗口中添加一些消息 */ for(fileline=file;fileline!=NULL;fileline=fileline->next) { gchar *msg = g_strdup_printf ("%s", fileline); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg, -1); g_free (msg); } cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Messages",cell,"text", 0,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column)); return scrolled_window;}int main( int argc, char *argv[] ){ GtkWidget *window; static GtkWidget *window1; GtkWidget *main_vbox; GtkWidget *sub1_vbox; GtkWidget *box; GtkWidget *menubar; GtkWidget *table; GtkWidget *label; GtkWidget *notebook; GtkWidget *button; GtkWidget *scrolled_window; GtkWidget *vpaned; GtkWidget *list; GtkWidget *text; DIR *dirp; struct dirent *direntp; struct stat statbuf; struct fileinfo * test,*headp; char buf[80]; char * read; FILE *fp; int i; char *bufferl[3]={"proc文件信息", "资源", "文件系统"}; if(stat("/proc/meminfo",&statbuf)<0) perror("/proc/meminfo"); if((statbuf.st_mode&S_IFMT)==S_IFDIR) test=list("/proc/meminfo");// else printout(".",argv[1]); // for(headp=test;headp!=NULL;headp=headp->next) // puts(headp->tiaomu); gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "系统监视器"); gtk_widget_set_size_request (GTK_WIDGET (window), 300, 200); main_vbox = gtk_vbox_new (FALSE, 1); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); gtk_widget_show (main_vbox); get_main_menu (window, &menubar); gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); gtk_widget_show (menubar); /* 创建一个新的笔记本,将标签页放在顶部 */ notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (main_vbox),notebook, TRUE, TRUE, 0); gtk_widget_show (notebook); /* 在笔记本后面追加几个页面 */ for (i = 0; i < 3; i++) { vpaned = gtk_vpaned_new (); gtk_widget_show (vpaned); /*switch(i) { case 0: if((fp=open("/proc/meminfo","r"))==NULL) { printf("File can't open!\n"); break; } while((read=fgets(buf,80,fp))!=NULL) list=create_list( read); break; default:break; }*/ list=create_list( test ); gtk_paned_add1 (GTK_PANED (vpaned), list); gtk_widget_show (list); label = gtk_label_new (bufferl[i]); gtk_notebook_append_page (GTK_NOTEBOOK (notebook),vpaned, label); } button = gtk_button_new_with_label ("关闭"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (delete), "button 1"); gtk_box_pack_end (GTK_BOX(main_vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); gtk_widget_show (window); gtk_main (); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -