gtk界面编程

[复制链接]
699|7
 楼主| keer_zu 发表于 2020-7-1 14:44 | 显示全部楼层 |阅读模式
这是一个很好的gtk界面编程的例子:
  1. #include <gtk/gtk.h>
  2. int main( int argc, char *argv[])
  3. {
  4.     GtkWidget *window;
  5.     /*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/
  6.     gtk_init(&argc, &argv);
  7.     /*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/
  8.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

  9.     /*开始显示窗口*/
  10.     gtk_widget_show(window);
  11.     gtk_main();
  12.     return 0;
  13. }
编译程序之前需要在ubuntu上安装:
  1. sudo apt-get install libgtk-3-dev
编译上面程序:
  1. gcc gt.c -o gtkwin `pkg-config --cflags --libs gtk+-3.0`

运行结果是一枚窗口:

623445efc30b5ae8d3.png

参考**:
gtk编程.docx (55.16 KB, 下载次数: 0)

 楼主| keer_zu 发表于 2020-7-1 15:27 | 显示全部楼层
本帖最后由 keer_zu 于 2020-7-1 18:24 编辑

@yyy71cj @dirtwillfly @icecut @dong_abc
把gtk用起来,自己做个文本编辑器,实现《设计模式》第二章中的例子。
我一直没有发现这个例子的代码,自己做一个可以更好掌握设计模式。


开始弄:

github:  https://github.com/KevinZu/lexi



评论

@dirtwillfly :大公司分得比较细,小公司不管内核还是应用  发表于 2020-7-2 09:22
后面我也会转到linux,不过是驱动方向  发表于 2020-7-1 21:36
 楼主| keer_zu 发表于 2020-7-2 13:41 | 显示全部楼层
 楼主| keer_zu 发表于 2020-7-3 13:32 | 显示全部楼层
上面窗口画图形代码:

  1. #include <stdio.h>
  2. #include <gtk/gtk.h>
  3. void gtest(int a)
  4. {
  5.         printf("===:%d\n",a);
  6. }



  7. static void
  8. draw_round_rectangle (cairo_t * cr,
  9.                       double x, double y,
  10.                       double width, double height, double r)
  11. {
  12.         cairo_move_to (cr, x + r, y);
  13.         cairo_line_to (cr, x + width - r, y);

  14.         cairo_move_to (cr, x + width, y + r);
  15.         cairo_line_to (cr, x + width, y + height - r);

  16.         cairo_move_to (cr, x + width - r, y + height);
  17.         cairo_line_to (cr, x + r, y + height);

  18.         cairo_move_to (cr, x, y + height - r);
  19.         cairo_line_to (cr, x, y + r);

  20.         cairo_arc (cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);
  21.         cairo_arc (cr, x + width - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);
  22.         cairo_arc (cr, x + width - r, y + height - r, r, 0, 3.14 / 2);
  23.         cairo_arc (cr, x + r, y + height - r, r, 3.14 / 2, 3.14);
  24. }

  25. static gboolean
  26. draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
  27. {
  28.         cr = gdk_cairo_create (gtk_widget_get_window (widget));

  29.         cairo_set_source_rgb (cr, 0, 0, 0);
  30.         cairo_set_line_width (cr, 1);
  31.         cairo_rectangle (cr, 20, 20, 120, 80);
  32.         cairo_rectangle (cr, 180, 20, 80, 80);
  33.         cairo_stroke_preserve (cr);
  34.         cairo_set_source_rgb (cr, 1, 1, 1);
  35.         cairo_fill (cr);

  36.         cairo_set_source_rgb (cr, 0, 0, 0);
  37.         cairo_arc (cr, 330, 60, 40, 0, 2 * 3.14);
  38.         cairo_stroke_preserve (cr);
  39.         cairo_set_source_rgb (cr, 1, 1, 1);
  40.         cairo_fill (cr);

  41.         cairo_set_source_rgb (cr, 0, 0, 0);
  42.         cairo_arc (cr, 90, 160, 40, 3.14 / 4, 3.14);
  43.         cairo_close_path (cr);
  44.         cairo_stroke_preserve(cr);
  45.         cairo_set_source_rgb (cr, 1, 1, 1);
  46.         cairo_fill (cr);

  47.         cairo_set_source_rgb (cr, 0, 0, 0);
  48.         cairo_translate (cr, 220, 180);
  49.         cairo_scale (cr, 1, 0.7);
  50.         cairo_arc (cr, 0, 0, 50, 0, 2 * 3.14);
  51.         cairo_stroke_preserve (cr);
  52.         cairo_set_source_rgb (cr, 1, 1, 1);
  53.         cairo_fill (cr);

  54.         cairo_set_source_rgb (cr, 0.8, 0.4, 0);
  55.         cairo_translate (cr, 80, -30);
  56.         cairo_set_line_width (cr, 6);
  57.         draw_round_rectangle (cr, 5, 5, 60, 60, 8);
  58.         cairo_stroke_preserve (cr);
  59.         cairo_set_source_rgb (cr, 0.8, 0.8, 0.2);
  60.         cairo_fill (cr);

  61.         cairo_destroy (cr);

  62.         return FALSE;
  63. }

  64. int gt( int argc, char **argv)
  65. {
  66.         GtkWidget *window;
  67.         GtkWidget *darea;

  68.         gtk_init (&argc, &argv);

  69.         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  70.         darea = gtk_drawing_area_new ();
  71.         gtk_container_add (GTK_CONTAINER (window), darea);

  72.         g_signal_connect (darea, "draw",
  73.                       G_CALLBACK (draw), NULL);
  74.         g_signal_connect (window, "destroy",
  75.                       G_CALLBACK (gtk_main_quit), NULL);

  76.         gtk_window_set_position (GTK_WINDOW (window),
  77.                              GTK_WIN_POS_CENTER);
  78.         gtk_window_set_default_size (GTK_WINDOW (window), 500, 400);

  79.         gtk_widget_show_all (window);

  80.         gtk_main ();

  81.         return 0;
  82. }

@gaoyang9992006


gaoyang9992006 发表于 2020-7-3 15:31 | 显示全部楼层
这个GUI用的人还是很多的。
 楼主| keer_zu 发表于 2020-7-3 15:48 | 显示全部楼层
gaoyang9992006 发表于 2020-7-3 15:31
这个GUI用的人还是很多的。

可能是更底层一些吧,很多UI系统都基于它实现。
还有就是linux下一共也就这几种桌面系统
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1488

主题

12949

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部