【GTK】視窗停靠

來源:互聯網
上載者:User
源碼:<br />#include <gdk/gdkcursor.h><br />#include <gtk/gtk.h></p><p>#define TEST_W 100<br />#define TEST_H 80</p><p>gboolean drag = FALSE; // 只在左鍵按下時拖動表單<br />gboolean hide = FALSE; // 只在左鍵按下時拖動表單<br />int nX = 0;<br />int nY = 0;<br />GtkWidget *window;</p><p>static gint button_press_event(GtkWidget * widget,GdkEventButton * event, gpointer data)</p><p>{</p><p> if (event->button == 1) // 判斷是否左鍵按下<br /> {<br /> drag = TRUE;<br /> nX = event->x; // 取得滑鼠相對於視窗的位置<br /> nY = event->y;</p><p> }<br /> // gdk_window_move_resize (widget->window, x, y, width, height);<br /> //gdk_window_move_resize (widget->window, 0, 0, 10, 80);<br /> //gtk_widget_set_usize(window,50,TEST_H);// gtk_widget_set_size_request(window, 5, TEST_H);<br /> return TRUE;</p><p>}<br />static gint button_release_event(GtkWidget * widget, GdkEventButton * event,gpointer data) // 滑鼠抬起事件<br />{</p><p> //gdk_window_move_resize (widget->window, 0, 0, 100, 80);<br /> //gtk_widget_set_usize(window,10, TEST_H);//gtk_widget_set_size_request(window, TEST_W, TEST_H);<br /> if (event->button == 1)</p><p> drag = FALSE;</p><p> return TRUE;</p><p>}<br />static gint motion_notify_event(GtkWidget * widget, GdkEventButton * event,gpointer data)//滑鼠移動事件<br />{<br /> gint x, y;<br /> GtkWidget *window = (GtkWidget *) data;<br /> gtk_window_get_position((GtkWindow *) window, &x, &y); // 取表單絕對座標</p><p> gdk_window_move_resize (widget->window, x, y, 100, 80);<br /> if (drag)<br /> {</p><p> gtk_window_move((GtkWindow *) window, x + event->x - nX, y + event->y - nY);// 移動表單<br /> g_print("x=%d;y=%d\n",x,y);</p><p> }</p><p> return TRUE;</p><p>}<br />gboolean leave_event (GtkWidget *widget,GdkEventCrossing *event,gpointer data)//滑鼠離開事件<br />{<br /> gint x, y;<br /> GtkWidget *window = (GtkWidget *) data;<br /> gtk_window_get_position((GtkWindow *) window, &x, &y);// 取表單絕對座標<br /> if(x<=5)</p><p> gdk_window_move_resize (widget->window, 0, y, 5, 80);</p><p> return TRUE;<br />}<br />int main(int argc, char **argv)<br />{</p><p> gtk_init(&argc, &argv);<br /> window = gtk_window_new(GTK_WINDOW_TOPLEVEL);<br /> //gtk_window_set_decorated(GTK_WINDOW(window), FALSE); // 去掉邊框<br /> //gtk_widget_set_size_request(window, TEST_W, TEST_H);//設定表單最小尺寸<br /> //gtk_window_set_default_size(window,TEST_W,TEST_H);<br /> //gtk_widget_set_usize(window,TEST_W, TEST_H);//設定表單大小<br /> //gtk_window_move((GtkWindow *) window, -20, -10);<br /> gtk_widget_set_events(window, // 設定表單擷取滑鼠事件<br /> //window.allocation</p><p> GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK</p><p> | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</p><p> | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);</p><p> gtk_signal_connect(GTK_OBJECT(window), "button_press_event",</p><p> (GtkSignalFunc) button_press_event, window); // 加入事件回調</p><p> gtk_signal_connect(GTK_OBJECT(window), "motion_notify_event",</p><p> (GtkSignalFunc) motion_notify_event, window);</p><p> gtk_signal_connect(GTK_OBJECT(window), "button_release_event",</p><p> (GtkSignalFunc) button_release_event, window);<br /> g_signal_connect (GTK_OBJECT (window), "leave_notify_event",</p><p> (GtkSignalFunc) leave_event, window);</p><p> gtk_widget_show_all(window);<br /> gtk_main();<br /> return TRUE;</p><p>}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.