pos界面用什么语言开发(用GTK+来创建一个带界面的C语言程序14——URL链接)

快鱼网 22 0

本节将介绍如何使用事件盒控件、处理事件盒控件的信号和在程序中启动浏览器。我们在编程时为了便于和使用者联系或让使用者查到某些方面的资料,一般在界面中加入一个按钮、图像或标签控件,使用者用鼠标单击此控件后会启动浏览器,自动打开 URL链接。用 GTK+实现此功能要用到事件盒(GtkEventBox)控件。因为标签和图像一般不能直接接收外部的鼠标事件,将它们放入到事件盒中后,就可以利用事件盒的可接收外部鼠标事件的特性来处理鼠标事件了。

#include

static gboolean button_press_callback(GtkWidget * event_box, GdkEventButton * event, gpointer data)

{

if(event->button == 1) //判断是否为鼠标左键

system("google-chrome ");

return TRUE;

}

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

{

GtkWidget * window;

GtkWidget * vbox;

GtkWidget * hbox;

GtkWidget * label;

GtkWidget * image;

GtkWidget * eventbox;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_title(GTK_WINDOW(window), "URL链接");

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_container_set_border_width(GTK_CONTAINER(window), 10);

vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_container_add(GTK_CONTAINER(window), vbox);

label = gtk_label_new("以下为两种形式的超链接:");

gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);

hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

eventbox = gtk_event_box_new();

g_signal_connect(G_OBJECT(eventbox), "button_press_event", G_CALLBACK(button_press_callback), image);

gtk_box_pack_start(GTK_BOX(hbox), eventbox, FALSE, FALSE, 15);

label = gtk_label_new("打开百度搜索......");

gtk_container_add(GTK_CONTAINER(eventbox), label);

eventbox = gtk_event_box_new();

g_signal_connect(G_OBJECT(eventbox), "button_press_event", G_CALLBACK(button_press_callback), image);

gtk_box_pack_start(GTK_BOX(hbox), eventbox, FALSE, FALSE, 15);

image = gtk_image_new_from_file("01.gif");

gtk_container_add(GTK_CONTAINER(eventbox), image);

gtk_widget_show_all(window);

gtk_main();

return FALSE;

}

运行结果:

当鼠标点击文本标签或者图片都可以用浏览器打开百度搜索。

代码分析:

(1) 事件盒的信号

事件盒的主要用途是为不具有自己窗口的控件来捕获事件的,它具有 GtkWidget 的所有信号类型。这里连接的是“key_press_event”,即单击鼠标信号,此信号的回调函数的第 2 个参数为GdkEventButton 结构类型,用于存贮鼠标按下时的事件信息,其中的成员button 为整型,表示鼠标哪一个键按下了,其中 1 为左键、2 为中键、3 为右键。

另外,此回调函数是有返回类型的,返回 TRUE 表示已经接收到事件,所以信号就不会发射了;返回 FALSE 则继续调用回调函数。

相关的其他事件信号感兴趣的可以自行查看帮助文档。

标签: GTK

抱歉,评论功能暂时关闭!