久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2524|回復: 0
打印 上一主題 下一主題
收起左側

GTK窗口布局管理--EvnetBox

[復制鏈接]
跳轉到指定樓層
樓主
ID:72519 發表于 2015-1-23 19:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
EventBox即為事件盒。在gtk中有一些控件[比如label控件]沒有與之關聯的GDK窗體[也有說是X窗體]。所以他們只能在其父窗體上顯示其外觀;卻不能接收event事件。要接收事件必須借助于事件盒eventbox。先來看一個簡單例子:
/**********************************
**
**FILE:         eventboxgtk+.c
**DATE:         20090619 23:50
**AUTHOR:       LAMMY
**VERSION:      0.0
**
**********************************/
#include <gtk/gtk.h>
#include <glib/gprintf.h>

static
gboolean _CallBackEventBoxEvent(GtkWidget *pHwidget, GdkEvent *pHevent, gpointer pData)
{
        if(GDK_2BUTTON_PRESS == pHevent->type)
        {   
                g_printf("[EventBox] --- 2button pressed ---\n");
        }   
        else
        {   
                g_printf("[EventBox] -- %x\n", pHevent->type);
        }   
        return FALSE;
}

static
gboolean _CallBackLabelEvent(GtkWidget *pHwidget, GdkEvent *pHevent, gpointer pData)
{
        if(GDK_2BUTTON_PRESS == pHevent->type)
        {   
                g_printf("[Label] --- 2button pressed ---\n");
        }   
        else
        {   
                g_printf("[Label] -- %x\n", pHevent->type);
        }   
   
        return FALSE;
}


int main(int argc, char *argv[])
{
        GtkWidget *pHwindow, *pHlabel, *pHeventbox;
   
        gtk_init(&argc, &argv);
        pHwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pHwindow), "EventBoxGtk+");
        gtk_container_set_border_width(GTK_CONTAINER(pHwindow), 10);
        gtk_widget_set_size_request(pHwindow, 200, 150);
   
        pHlabel =  gtk_label_new("=GtkLabel=");
        pHeventbox = gtk_event_box_new();
   
        gtk_event_box_set_above_child(GTK_EVENT_BOX(pHeventbox), TRUE);
   
        g_signal_connect(G_OBJECT(pHeventbox), "button_press_event", G_CALLBACK(_CallBackEventBoxEvent), NULL);
        g_signal_connect(G_OBJECT(pHlabel), "button_press_event", G_CALLBACK(_CallBackLabelEvent), NULL);
   
        gtk_container_add(GTK_CONTAINER(pHeventbox), pHlabel);
        gtk_container_add(GTK_CONTAINER(pHwindow), pHeventbox);
   
        gtk_widget_set_events(pHeventbox, GDK_BUTTON_PRESS_MASK);
        gtk_widget_realize(pHeventbox);
        gdk_window_set_cursor(pHeventbox->window, gdk_cursor_new(GDK_HAND1));
   
        gtk_widget_show_all(pHwindow);

        gtk_main();
   
        return 0;
}1. 創建一個eventbox控件函數:
GtkWidget* gtk_event_box_new(void);2. 設置eventbox控件位置函數:
void                gtk_event_box_set_above_child       (GtkEventBox *event_box,
                                                         gboolean above_child);該函數用于設置*evetn_box位于其子控件上方還是下方,取決于above_child為TRUE還是FALSE。當位于其下方時,事件盒的事件消息會先發送到子控件,待其處理完后[前提是子控件有接收事件的能力。從上一個例子,會發現函數_CallBackLabelEvent無論如何都沒有執行],才自己處理;如果在其上方,子控件將不會接收任何事件。
3. 你必須在執行函數gtk_widget_realize之前執行函數gtk_widget_set_events,只有eventbox是個特例。具體原因我這邊將不太清楚,建議看《Foundations of GTK+ Development》的96頁。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产片网站 | 国产日韩久久久久69影院 | 午夜丰满寂寞少妇精品 | 欧美福利网站 | 国产成人精品一区二区 | 在线观看免费观看在线91 | 国产精品一区二区三区在线 | 欧洲精品在线观看 | 日韩欧美在线不卡 | 日韩欧美国产一区二区三区 | 美女在线一区二区 | 毛片软件| 在线视频中文字幕 | 一区二区免费在线观看 | 色视频在线免费观看 | 国产高清在线精品 | 国产精品久久久久久婷婷天堂 | 99精品欧美一区二区蜜桃免费 | 91久久精品一区二区三区 | 国产伦精品一区二区 | 亚洲精品久久久久久久久久久久久 | 亚洲国产日韩欧美 | 国产精品国产三级国产aⅴ原创 | 亚洲国产精品成人无久久精品 | 亚洲精品久久久久久久久久久 | 国产一级视频在线播放 | 一本一道久久a久久精品综合蜜臀 | 99精品久久久久久中文字幕 | 一级欧美一级日韩片 | 9999国产精品欧美久久久久久 | 色伊人| www.激情.com| 精品中文在线 | 欧美成人aaa级毛片在线视频 | 日韩欧美视频 | 日韩免费中文字幕 | 久在线精品视频 | 伦理午夜电影免费观看 | 国产黄色在线 | 午夜小视频在线播放 | 成人三级在线播放 |