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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2511|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

GTK窗口布局管理--EvnetBox

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-23 19:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
EventBox即為事件盒。在gtk中有一些控件[比如label控件]沒(méi)有與之關(guān)聯(lián)的GDK窗體[也有說(shuō)是X窗體]。所以他們只能在其父窗體上顯示其外觀;卻不能接收event事件。要接收事件必須借助于事件盒eventbox。先來(lái)看一個(gè)簡(jiǎn)單例子:
/**********************************
**
**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. 創(chuàng)建一個(gè)eventbox控件函數(shù):
GtkWidget* gtk_event_box_new(void);2. 設(shè)置eventbox控件位置函數(shù):
void                gtk_event_box_set_above_child       (GtkEventBox *event_box,
                                                         gboolean above_child);該函數(shù)用于設(shè)置*evetn_box位于其子控件上方還是下方,取決于above_child為TRUE還是FALSE。當(dāng)位于其下方時(shí),事件盒的事件消息會(huì)先發(fā)送到子控件,待其處理完后[前提是子控件有接收事件的能力。從上一個(gè)例子,會(huì)發(fā)現(xiàn)函數(shù)_CallBackLabelEvent無(wú)論如何都沒(méi)有執(zhí)行],才自己處理;如果在其上方,子控件將不會(huì)接收任何事件。
3. 你必須在執(zhí)行函數(shù)gtk_widget_realize之前執(zhí)行函數(shù)gtk_widget_set_events,只有eventbox是個(gè)特例。具體原因我這邊將不太清楚,建議看《Foundations of GTK+ Development》的96頁(yè)。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品九九 | 亚洲高清视频在线 | 美国a级毛片免费视频 | 一区二区手机在线 | 天天av天天好逼 | 国产欧美视频一区二区 | 播放一级毛片 | 精精国产xxxx视频在线播放 | 欧美激情精品久久久久久 | 色就干 | av网址在线| 一级毛片免费完整视频 | 精品1区 | 在线观看视频福利 | 亚洲一区二区三区在线免费 | 在线观看视频91 | 青青草这里只有精品 | 羞羞视频一区二区 | www.99精品 | 久久久久国产精品一区三寸 | 欧美精品一区在线发布 | 国产激情精品一区二区三区 | 国产精品久久久久久久久久东京 | 夜夜夜操 | 国产精品99久久久久久宅男 | 日韩欧美在线观看 | 色999日韩 | 欧美1区| 91久久久www播放日本观看 | 精品国产乱码 | 久久婷婷香蕉热狠狠综合 | 成人日韩| 久久黄色网 | 亚洲精品www | 97人人超碰 | 国产精品久久久久一区二区三区 | 中文字幕色站 | 国产h视频 | 久久久久亚洲精品 | 一级毛片观看 | 一区视频 |