亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? x2379.html

?? GTK詳細教程 GTK詳細教程
?? HTML
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><TITLE>事件處理</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="GTK+ 2.0 教程"HREF="book1.html"><LINKREL="UP"TITLE="涂鴉板,一個簡單的繪圖程序"HREF="c2370.html"><LINKREL="PREVIOUS"TITLE="涂鴉板,一個簡單的繪圖程序"HREF="c2370.html"><LINKREL="NEXT"TITLE="繪圖區構件和繪圖"HREF="x2418.html"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">GTK+ 2.0 教程</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="c2370.html"ACCESSKEY="P">&#60;&#60;&#60; Previous</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">涂鴉板,一個簡單的繪圖程序</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="x2418.html"ACCESSKEY="N">Next &#62;&#62;&#62;</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="SEC-EVENTHANDLING">事件處理</H1><P>我們已經討論了 GTK 信號中的高級的事件,如單選菜單項。然而,有時學習一些低級的事件也是有好用的,如鼠標移動或按一個鍵。在 GTK 中有信號與這些低級<ICLASS="EMPHASIS">事件</I>聯系。這些信號的處理函數有額外的參數,該函數是一個結構指針,包含事件的信息。例如,傳遞給移動事件處理函數的參數是一個 GdkEventMotion 類型的結構指針,如下:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">struct _GdkEventMotion{  GdkEventType type;  GdkWindow *window;  guint32 time;  gdouble x;  gdouble y;  ...  guint state;  ...};</PRE></TD></TR></TABLE><P><TTCLASS="LITERAL">type</TT>會設置為事件的類型,如移動事件是<TTCLASS="LITERAL">GDK_MOTION_NOTIFY</TT>,window是發生事件的窗口。<TTCLASS="LITERAL">x</TT>和<TTCLASS="LITERAL">y</TT>給出事件的座標。<TTCLASS="LITERAL">state</TT>指出事件發生時的狀態(按下了那個修正鍵或鼠標鍵)。它是如下值的位或:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GDK_SHIFT_MASK  GDK_LOCK_MASK   GDK_CONTROL_MASKGDK_MOD1_MASK   GDK_MOD2_MASK   GDK_MOD3_MASK   GDK_MOD4_MASK   GDK_MOD5_MASK   GDK_BUTTON1_MASKGDK_BUTTON2_MASKGDK_BUTTON3_MASKGDK_BUTTON4_MASKGDK_BUTTON5_MASK</PRE></TD></TR></TABLE><P>至于其它信號,我們調用函數<TTCLASS="LITERAL">gtk_signal_connect()</TT>來決定事件發生時調用的處理函數。但是我們也需要讓 GTK 知道我們想接收的事件。可以用如下函數:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">void gtk_widget_set_events (GtkWidget *widget,                            gint      events);</PRE></TD></TR></TABLE><P>第二個參數為我們感興趣的事件。它為不同類型事件的位或。事件類型的列表如下:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GDK_EXPOSURE_MASKGDK_POINTER_MOTION_MASKGDK_POINTER_MOTION_HINT_MASKGDK_BUTTON_MOTION_MASK     GDK_BUTTON1_MOTION_MASK    GDK_BUTTON2_MOTION_MASK    GDK_BUTTON3_MOTION_MASK    GDK_BUTTON_PRESS_MASK      GDK_BUTTON_RELEASE_MASK    GDK_KEY_PRESS_MASK         GDK_KEY_RELEASE_MASK       GDK_ENTER_NOTIFY_MASK      GDK_LEAVE_NOTIFY_MASK      GDK_FOCUS_CHANGE_MASK      GDK_STRUCTURE_MASK         GDK_PROPERTY_CHANGE_MASK   GDK_PROXIMITY_IN_MASK      GDK_PROXIMITY_OUT_MASK     </PRE></TD></TR></TABLE><P>當調用函數<TTCLASS="LITERAL">gtk_widget_set_events()</TT>時,有幾點需注意。首先,該函數必須在一個 GTK 構件的 X 窗口創建之前調用。實際上,意味者你應該在創建一個構件之后立即調用該函數。其次,構件必須有一個相關聯的 X 窗口。為了提高效益,許多構件類型沒有屬于自己的窗口,它們繪制在父窗口上。這些構件是:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GtkAlignmentGtkArrowGtkBinGtkBoxGtkImageGtkItemGtkLabelGtkPixmapGtkScrolledWindowGtkSeparatorGtkTableGtkAspectFrameGtkFrameGtkVBoxGtkHBoxGtkVSeparatorGtkHSeparator</PRE></TD></TR></TABLE><P>為了捕獲這些構件的事件,你需要使用事件盒構件。詳見 <AHREF="c1289.html#SEC-EVENTBOX">事件盒</A>。</P><P>對于我們的繪圖程序,我們想知道什么時候鼠標鍵按下和什么時候鼠標移動,因此我們要用<TTCLASS="LITERAL">GDK_POINTER_MOTION_MASK</TT>和<TTCLASS="LITERAL">GDK_BUTTON_PRESS_MASK</TT>。我們也想知道什么時候窗口需要重新繪制,因此我們也要用<TTCLASS="LITERAL">GDK_EXPOSURE_MASK</TT>。雖然我們也想在窗口尺寸改變時得到消息,不過我們不必用<TTCLASS="LITERAL">GDK_STRUCTURE_MASK</TT>標志,因為所有的窗口都自動設了該標志。</P><P>只用<TTCLASS="LITERAL">GDK_POINTER_MOTION_MASK</TT>是有問題的。這會使服務器在每次用戶移動鼠標時向事件隊列添加一個移動事件。假設處理一個移動事件需要0.1秒,但是X服務器每0.05秒添加一個新的移動事件。如果用戶繪制要花5秒,那么在釋放鼠標鍵后我們的程序會中斷5秒!我們所需要的只是為我們處理的每個事件的獲取一個移動事件。解決這個問題的方法是要用<TTCLASS="LITERAL">GDK_POINTER_MOTION_HINT_MASK</TT>。</P><P>當我們用<TTCLASS="LITERAL">GDK_POINTER_MOTION_HINT_MASK</TT>時,在指針進入我們的窗口之后、或在一個按鈕按下或釋放事件之后,服務器在指針首次移動時向我們發送一個移動事件。后發的移動事件都會被壓制,直到我們用如下函數去獲取鼠標指針的位置:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GdkWindow*    gdk_window_get_pointer     (GdkWindow       *window,					  gint            *x,					  gint            *y,					  GdkModifierType *mask);</PRE></TD></TR></TABLE><P>(還有另外一個函數<TTCLASS="LITERAL">gtk_widget_get_pointer()</TT>,它有相似的接口,不過它不是很有用,因為它僅僅獲取鼠標指針的位置,而不管按下了那個鍵。)</P><P>設置我們的窗口事件的代碼如下:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">  gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",		      (GtkSignalFunc) expose_event, NULL);  gtk_signal_connect (GTK_OBJECT(drawing_area),"configure_event",		      (GtkSignalFunc) configure_event, NULL);  gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",		      (GtkSignalFunc) motion_notify_event, NULL);  gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",		      (GtkSignalFunc) button_press_event, NULL);  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK			 | GDK_LEAVE_NOTIFY_MASK			 | GDK_BUTTON_PRESS_MASK			 | GDK_POINTER_MOTION_MASK			 | GDK_POINTER_MOTION_HINT_MASK);</PRE></TD></TR></TABLE><P>我們對在下一節講解"expose_event"和"configure_event"的處理函數。"motion_notify_event"和"button_press_event"的處理函數很簡單:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">static gintbutton_press_event (GtkWidget *widget, GdkEventButton *event){  if (event-&#62;button == 1 &#38;&#38; pixmap != NULL)      draw_brush (widget, event-&#62;x, event-&#62;y);  return TRUE;}static gintmotion_notify_event (GtkWidget *widget, GdkEventMotion *event){  int x, y;  GdkModifierType state;  if (event-&#62;is_hint)    gdk_window_get_pointer (event-&#62;window, &#38;x, &#38;y, &#38;state);  else    {      x = event-&#62;x;      y = event-&#62;y;      state = event-&#62;state;    }      if (state &#38; GDK_BUTTON1_MASK &#38;&#38; pixmap != NULL)    draw_brush (widget, x, y);    return TRUE;}</PRE></TD></TR></TABLE></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="c2370.html"ACCESSKEY="P">&#60;&#60;&#60; Previous</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="book1.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="x2418.html"ACCESSKEY="N">Next &#62;&#62;&#62;</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">涂鴉板,一個簡單的繪圖程序</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="c2370.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">繪圖區構件和繪圖</TD></TR></TABLE></DIV></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美激情视频在线观看一区二区三区| 亚洲精品乱码久久久久久久久| 国产一区二区三区免费| 国产精品久久福利| 国产日产欧美一区二区视频| 精品福利在线导航| 久久婷婷久久一区二区三区| 日本一区二区三区电影| 国产午夜亚洲精品羞羞网站| 国产欧美精品一区二区色综合朱莉| 日韩欧美国产1| 欧美精品一区二区久久婷婷| 欧美亚州韩日在线看免费版国语版| 懂色中文一区二区在线播放| 成人免费看的视频| 一本大道久久a久久精品综合| www.亚洲在线| 欧美日韩在线播放| 精品国产一区二区国模嫣然| 亚洲国产精品av| 亚洲一区二区三区视频在线播放| 亚洲成人动漫在线观看| 丝袜脚交一区二区| 国产高清精品网站| 一本到不卡精品视频在线观看| 欧美日韩成人高清| 久久综合一区二区| 亚洲欧美日韩中文字幕一区二区三区 | 日韩精品中午字幕| 日韩一区二区影院| 欧美国产1区2区| 午夜精品视频在线观看| 国产精品一区二区三区网站| 成人福利视频网站| 欧美一区二区黄色| 国产欧美日韩久久| 蜜桃视频第一区免费观看| 成人高清伦理免费影院在线观看| 欧美日韩精品欧美日韩精品一 | 中文乱码免费一区二区| 一区二区三区四区不卡在线| 久久99精品国产91久久来源| 91看片淫黄大片一级| 91精品国产一区二区三区| 国产精品福利一区二区三区| 视频在线观看91| 91影院在线观看| 久久综合中文字幕| 青娱乐精品在线视频| 91免费看片在线观看| 91精品国产综合久久精品| 亚洲男人的天堂在线观看| 国产精品一区二区在线观看网站| 欧美日韩三级在线| 亚洲裸体在线观看| 国产成人综合自拍| 欧美成人性战久久| 亚洲一区二区视频在线| 成人动漫中文字幕| 久久亚洲综合色| 日本午夜精品一区二区三区电影| 欧洲av在线精品| 亚洲视频免费观看| 国产成人综合自拍| 精品国产乱子伦一区| 免费看黄色91| 在线欧美日韩精品| 亚洲人成伊人成综合网小说| 国产91丝袜在线播放| 精品国产免费人成电影在线观看四季 | 国产精品福利影院| 风间由美一区二区三区在线观看| 欧美一级日韩一级| 日一区二区三区| 欧美一区日本一区韩国一区| 欧美xxxxx牲另类人与| 亚洲色图欧洲色图婷婷| 东方欧美亚洲色图在线| 欧美激情一区二区三区在线| 国产高清不卡一区| 欧美激情一区二区三区四区| 成人激情图片网| 综合欧美亚洲日本| 在线视频欧美精品| 亚洲色图一区二区三区| 一本色道久久综合亚洲91| 日韩精品中午字幕| 麻豆高清免费国产一区| 日韩免费视频一区二区| 美女视频免费一区| 久久精品一区二区三区不卡| 粉嫩aⅴ一区二区三区四区五区 | 亚洲国产精品二十页| 岛国精品在线播放| 国产精品久久久久7777按摩| 欧美伊人精品成人久久综合97| 午夜精品久久一牛影视| 日韩一卡二卡三卡| 国产一区二区三区黄视频| 国产精品久久久久天堂| 欧美色图在线观看| 久久国产精品区| 欧美韩国日本不卡| 欧美日韩免费一区二区三区| 激情伊人五月天久久综合| 中文字幕色av一区二区三区| 欧美日韩午夜在线| 国产在线精品一区二区夜色| 国产精品传媒在线| 日韩一区二区视频在线观看| 国产精品一区二区果冻传媒| 18涩涩午夜精品.www| 欧美日韩国产一级二级| 国产99久久久精品| 视频一区免费在线观看| 国产精品乱码妇女bbbb| 欧美日本韩国一区二区三区视频| 韩国毛片一区二区三区| 亚洲中国最大av网站| 欧美一激情一区二区三区| 91亚洲大成网污www| 极品尤物av久久免费看| 性做久久久久久免费观看| 欧美激情一区二区三区不卡| 欧美一级黄色片| 欧美色成人综合| 91啪九色porn原创视频在线观看| 久久 天天综合| 肉色丝袜一区二区| 亚洲国产欧美另类丝袜| 国产精品午夜在线| 国产欧美一区二区精品久导航 | 久久精品国产精品青草| 国产色产综合产在线视频| 欧美日韩精品一区二区三区| 99久久精品一区二区| 国产成人在线视频免费播放| 日韩影院免费视频| 亚洲国产一区二区视频| 久久免费视频一区| 精品国产一区二区三区av性色| 欧美天天综合网| 欧洲生活片亚洲生活在线观看| 丁香网亚洲国际| 成人网在线免费视频| 久久精品国产一区二区三区免费看| 亚洲综合激情另类小说区| 亚洲私人黄色宅男| 国产欧美日韩另类一区| 久久久久久久久久美女| 91精品国产麻豆国产自产在线| 欧美色图在线观看| 欧美精品vⅰdeose4hd| 欧美日本在线观看| 欧美日韩在线亚洲一区蜜芽| 972aa.com艺术欧美| 96av麻豆蜜桃一区二区| 91高清视频免费看| 欧美日韩大陆在线| 精品视频在线免费看| 国产福利91精品| 国产成人综合精品三级| 成人激情免费电影网址| 91丨porny丨国产入口| 91麻豆国产福利精品| 欧美日韩视频专区在线播放| 成人一道本在线| 国产一区二区福利视频| 成人精品鲁一区一区二区| 91美女在线看| 欧美日韩亚洲另类| 日韩欧美在线综合网| 精品国产髙清在线看国产毛片| 欧美一区二区在线播放| 日韩欧美一级二级三级久久久| 久久综合网色—综合色88| 国产色一区二区| 国产精品蜜臀在线观看| 一区二区三区日韩| 久久精品国内一区二区三区| 岛国一区二区在线观看| 欧美色男人天堂| 国产亚洲一区二区三区在线观看| 亚洲日本丝袜连裤袜办公室| 天天操天天综合网| 成人久久视频在线观看| 3751色影院一区二区三区| 国产视频在线观看一区二区三区| 亚洲香肠在线观看| 国产成人av电影| 在线播放视频一区| 日韩精品一区国产麻豆| 亚洲黄色片在线观看| 激情综合亚洲精品| 欧美色图天堂网| 国产精品美女久久久久久2018| 日韩**一区毛片| 在线免费一区三区| 中文字幕一区二区三区av| 久久草av在线|