2

以下のコードがオンドロー コールバックを 1 回ではなく 3 回トリガーする理由について、私は頭を悩ませてきました。

#include <iostream>
#include <gtk/gtk.h>

using namespace std;

void on_draw(){
    cout << "drawing"<<endl;
}

int main( int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *drgArea;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  drgArea = gtk_drawing_area_new();
//  gtk_widget_set_redraw_on_allocate(drgArea, -1);
  gtk_container_add(GTK_CONTAINER(window), drgArea);
  gtk_widget_show_all(window);
  g_signal_connect(drgArea, "expose-event",
            G_CALLBACK(on_draw), NULL);
  gtk_main();

  return 0;
}
4

1 に答える 1

2

これはおそらく、コンポジター/ウィンドウ マネージャーに関連しています。

cinnamon [2.0.14] を使用2すると、アプリケーションの起動時に再描画が表示されます (gtk3/3.10.6/"draw" または gtk2/2.24.22/"expose-event" を使用しても)。

于 2014-01-16T09:05:03.763 に答える