c++ - 在 gtk 中绘制点/线。 C++

标签 c++ gtk mouse point

嘿,我正在使用 C++ 编写一个具有绘图区域的程序。我需要能够从绘图区域检测鼠标信号并在这些位置绘制点。我怎样才能做到这一点?没有多少论坛可以帮助解决这些问题,而且文档也不清楚。有人可以帮帮我吗?

最佳答案

gtk3 应用程序中的绘图是响应“draw”信号而完成的。您将回调函数连接到“draw”信号,当 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;
}

现在,要处理鼠标点击,您需要将另一个回调函数连接到“button-press-event”:

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

参见 drawing area reference docs举个小例子和 drawing area demo一个完整的应用程序。

关于c++ - 在 gtk 中绘制点/线。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285926/

相关文章:

assembly - 在 assembly 中使用鼠标在屏幕上绘制 (emu8086)

c++ - 我可以根据是否有东西可以释放来释放内存吗?

c - GTK 计时器 - 如何在框架内制作计时器

c++ - (GTK :4783): Gtk-CRITICAL **: gtk_image_set_from_pixbuf: assertion 'GTK_IS_IMAGE (image)' failed

c - gtk2 中已弃用的 gtk_list_new() 的替代方案?

javascript - 如何在 HTML canvas 中获取正确的鼠标坐标

c++ - Valgrind 检测 strlen 中的无效读取

c++ - 互斥锁是否会锁定自身,或者有问题的内存位置?

c++ - SFML 纹理变换(放大)

linux - 在 Linux 中检测键盘、鼠标 Activity