跳转至内容

计算机编程/事件驱动编程

来自维基教科书,自由的教学读物

在这种类型的编程中,编写一段代码来响应每个事件。事件可以是用户事件,例如按钮点击或鼠标移动。事件也可以在计算机内部生成,例如计时器事件。最后,程序员可以生成事件。

响应事件有时被称为处理事件。

该程序仅仅由响应事件的代码段组成。这些代码段可能反过来使用其他代码段(过程,方法)。

这个简单的 GTK+ 程序制作了一个具有按钮的 GUI,该按钮响应点击事件,我们在由 gtk_main() 函数提供的循环中输入后。每当发生事件时,例如 "clicked" 事件,我们通过 g_signal_connect() 函数查找与其连接的事件处理程序,并通过调用它们来委托函数。在本例中,调用了处理程序 btn_clicked。

/*
#    GtkBook :
#       A Book for GTK+ users.
#    Copyright (C) July, 2005 Muthiah Annamalai
#
#    This program is free software; Licensed under GPL.
*/
#include<gtk/gtk.h>

gboolean
btn_clicked(GtkWidget *w,gpointer data)
{
  GtkButton *btn=GTK_BUTTON(w);
  gtk_button_set_label(btn,"You Cliked Me");  
  return TRUE;
}

int main()
{
  GtkWidget *w,*box,*btn;
  gtk_init(NULL,NULL);

  w=gtk_window_new(GTK_WINDOW_TOPLEVEL);

  box=gtk_vbox_new(!FALSE,!FALSE);
  gtk_window_set_title(GTK_WINDOW(w),"Button Widget");
  
  btn=gtk_button_new_with_label("Hello World! Click Me:");
  gtk_container_add(GTK_CONTAINER(w),btn);

  g_signal_connect(G_OBJECT(btn),"clicked",G_CALLBACK(btn_clicked),NULL);
  gtk_window_set_position(GTK_WINDOW(w),GTK_WIN_POS_CENTER);  
  gtk_widget_show_all(w);

  gtk_main();
  return 0;
}

/* 
gcc -o button button.c -Wall -ggdb `pkg-config gtk+-2.0  --cflags --libs`
*/
华夏公益教科书