2012-02-14 118 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的教程并不算太坏(对于开源教程来说),您可以通过阅读基础知识并根据需要查看其他感兴趣的章节开头。