2012-02-14 16 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

答えて

4

gtk3アプリケーションでの描画は、「描画」信号に応答して行われます。コールバック関数を "draw"シグナルに接続し、gtk +がウィンドウを再描画する必要がある場合、コールバックが呼び出されます。

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); 

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

コールバックは次のようになります

小さな例についてはdrawing area reference docs、完全なアプリケーションについてはdrawing area demoを参照してください。

+0

ありがとうございました。これは便利でした。 :) –

1

gtkmmをC++で使用するのが最適です。ほとんどのイベントは、特定の仮想メソッドをオーバーロードすることによって取得できます。マウスを押すと、on_button_press_eventメソッドがオーバーロードされます。 gtkmm.orgのチュートリアルはそれほど悪くはありません(オープンソースのチュートリアルの場合)。基本について読んで、必要に応じて他の章を見ても良いでしょう。

関連する問題