zoukankan      html  css  js  c++  java
  • 在Ubuntu下GTK编程笔记(二)

        在《在Ubuntu下GTK编程笔记(一)》中,我们讲述了gtk环境的构筑,以及制

    作了一个简单的HelloWorld程序,在本节中我们对HelloWorld程序进行展开,介绍

    gtk的信号和回调机制。

        所有的GUI库都有一个共同点:必须有某种机制响应用户动作以执行代码。命令行

    程序有奢侈的做法:就是暂停执行,等待用户输入,然后采用switch语句等机制使程

    序根据输入不同而分支执行。这种做法对GUI应用程序是不现实的,因为应用程序必

    须不断地响应用户输入,例如她需要不断地更新窗口区域。

        现代窗口系统是由事件和事件监听系统来解决这个问题的。笔者接触到最早的事件

    程序是用VB写的,其思想是,每次用户输入都触发一个事件。程序员只需编写监听事

    件以及事件触发时执行的代码。

        相应地,GTK有自己的事件和事件监听系统,叫做信号(signal)和回调函数(callback)。

    它们非常简单易用,因为你可以用C语言的一个有用的特征——函数指针来设置信号

    处理器。

        GTK信号:当某件事发生时GtkObject对象发出的数据。

        回调函数:与信号连接,一旦信号发出就会被调用的函数。

        典型的回调函数的原型:

            void a_callback_function ( GtkWidget *widget, gpointer user_data);

            参数1:指向发出信号的窗口部件的指针;

            参数2:回调函数与信号连接时定义的任一指针。

        连接回调函数,只需要调用g_signal_connect函数就可以了:

            gulong g_signal_connect (gpointer *object, const gchar *name,

                                                 GCallback func, gpointer user_data);

        ※连接回调函数没有任何限制。可以将多个信号连接到一个回调函数,也可以将

          多个回调函数连接到一个信号。

        以上,是GTK信号和回调函数的介绍,下面就HelloWorld程序进行分析:

        HelloWorld程序中定义的回调函数:

    1 void closeApp (GtkWidget *window, gpointer data) {
    2     gtk_main_quit();
    3 }

        连接回调函数的方法:

    g_signal_connect(GTK_OBJECT(window), "destroy",
                     GTK_SIGNAL_FUNC(closeApp), NULL);

        效果:window窗口发出destroy信号时,将执行回调函数closeApp,

    使程序正常终止。

        ※有兴趣的读者可以试试:当去掉以上代码时,点击关闭按钮时,依然

          可以关闭窗口,但是程序本身并没有被终止掉。

    ----------------------------------------------------------------------------

  • 相关阅读:
    bzoj1081 [SCOI2005]超级格雷码
    bzoj3790 神奇项链
    bzoj2822 [AHOI2012]树屋阶梯
    bzoj1485 [HNOI2009]有趣的数列
    bzoj1486 [HNOI2009]最小圈
    bzoj2721 [Violet 5]樱花
    POJ 1238 Substrings
    ZOJ Team Formation
    POJ 1459 Power Network
    POJ 1458 Common Subsequence
  • 原文地址:https://www.cnblogs.com/flycatorg/p/1784389.html
Copyright © 2011-2022 走看看