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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2464|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色a视频 | 日韩欧美一级 | 中文字幕精品视频 | 精品国产一区二区在线 | 中文字幕日韩欧美一区二区三区 | 久久久国产精品视频 | 狠狠狠干 | 精久久久 | 色偷偷888欧美精品久久久 | 久久av资源网 | 国产精品国产精品国产专区不片 | 在线看片国产 | 国产高清在线精品 | 久草网址| 久久精品亚洲精品国产欧美 | 伊人伊人伊人 | 久久久久久久一区二区三区 | 99视频在线播放 | 国产免费一区 | 天天爽夜夜骑 | 可以免费看的毛片 | 在线观看一区 | 亚洲九九 | 国产精品国产三级国产aⅴ无密码 | 天天综合永久入口 | 一本色道精品久久一区二区三区 | 国产1区2区 | 日韩在线观看一区 | 国产精品美女久久久免费 | 久久久久久亚洲 | 亚洲一区精品在线 | 成人久久久 | 亚洲欧美一区二区三区在线 | 四虎最新视频 | 国产三级在线观看播放 | 日韩视频精品 | 人人种亚洲 | 四虎影院新网址 | 99国产精品久久久久老师 | 亚洲女优在线播放 | 中文字幕av在线 |