2012-02-14 115 views
0

嘿,我正在使用c + +編寫一個具有繪圖區域的程序。我需要從繪圖區域檢測鼠標信號並在這些位置繪製點。我怎樣才能做到這一點?沒有太多的論壇可以幫助解決這個問題,文檔也不清楚。有人能幫幫我嗎?在gtk中繪製一個點/線。 C++

+1

您使用的是GTK 2還是GTK 3? GTK 2使用'expose-event'事件,而GTK 3使用'draw'事件。你在C++程序中使用GTKmm(GTK C++綁定)還是GTK C API? – liberforce 2012-02-15 14:43:11

回答

4

在gtk3應用程序中繪製是爲了響應「繪製」信號而完成的。您將回調函數連接到「繪製」信號,並且當gtk +需要重繪窗口時,將調用回調函數。

g_signal_connect (drawingarea, "draw", 
        G_CALLBACK (draw_cb), NULL); 

回調看起來是這樣的:

static gboolean 
draw_cb (GtkWidget *widget, 
     cairo_t *cr, 
     gpointer data) 
{ 
    // do your drawing on the provided cairo_t 
    // ... 

    return FALSE; 
} 

現在,處理鼠標點擊,您需要連接另一個回調函數「按鈕按下事件」:

g_signal_connect (drawingarea, "button-press-event", 
        G_CALLBACK (button_press_event_cb), NULL); 

查看drawing area reference docs的一個小例子,drawing area demo查看完整的應用程序。

+0

嘿謝謝。這很有用。 :) – 2012-02-15 17:59:07

1

使用gtkmm與C++,這是最好的選擇。大多數事件可以通過重載特定的虛擬方法來捕獲。對於鼠標按下,您會超載on_button_press_event方法。 gtkmm.org的教程並不算太壞(對於開源教程來說),您可以通過閱讀基礎知識並根據需要查看其他感興趣的章節開頭。