GTK3では、マウスカーソルを十字線に設定すると、GtkWidget、この場合はGtkDrawingArea?GtkDrawingArea上でマウスカーソルを十字線に設定するにはどうすればよいですか?
1
A
答えて
1
まず第一に、あなたは、イベントを受け取るために、use a backing windowにGtkDrawingArea
ウィジェットを伝える必要があります。
gtk_widget_set_has_window (GTK_WIDGET (darea), TRUE);
を次に、あなたがそれをwhich events you wish to subscribe to伝える必要があります。ポインタ入りの通知を受けるためやウィジェット残しで、この場合には、あなたは、超過イベントをしたい:この時点で
int crossing_mask = GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK;
gtk_widget_add_events (GTK_WIDGET (darea), crossing_mask);
を、あなたはGtkWidget::enter-notify-event
とGtkWidget::leave-notify-event
信号に接続することができます。
g_signal_connect (darea, "enter-notify-event", G_CALLBACK (on_crossing), NULL);
g_signal_connect (darea, "leave-notify-event", G_CALLBACK (on_crossing), NULL);
必要に応じて2つの別々のシグナルハンドラを使用することができますが、複雑な処理をしない限り、コードはほぼ同じになります。
on_crossing()
ハンドラは次のようになります:
static gboolean
on_crossing (GtkWidget *darea, GdkEventCrossing *event)
{
switch (gdk_event_get_event_type (event))
{
case GDK_ENTER_NOTIFY:
// Do something on enter
break;
case GDK_LEAVE_NOTIFY:
// Do something on leave
break;
}
}
は今、あなたはイベントの種類に応じて、使用するカーソルを指定しています。 GTK +は同じカーソル名を使用しますas CSS does;あなたはを使用してa cursor instanceを作成し、描画領域ウィジェットが使用するGdkWindow
に関連付けする必要があります:あなたの詳細な回答のため
// Get the display server connection
GdkDisplay *display = gtk_widget_get_display (darea);
GdkCursor *cursor;
switch (gdk_event_get_event_type (event))
{
case GDK_ENTER_NOTIFY:
cursor = gdk_cursor_new_from_name (display, "crosshair");
break;
case GDK_ENTER_NOTIFY:
cursor = gdk_cursor_new_from_name (display, "default");
break;
}
// Assign the cursor to the window
gdk_window_set_cursor (gtk_widget_get_window (darea), cursor);
// Release the reference on the cursor
g_object_unref (cursor);
関連する問題
- 1. GTK3のGtkDrawingArea上でマウスカーソルを変更するにはどうすればよいですか?
- 2. GtkDrawingArea - 描画可能にするにはどうすればいいですか?
- 3. マウスカーソルを非表示にするにはどうすればよいですか?
- 4. アンドロイドでプログラムでスタイルとテーマを線形レイアウトに設定するにはどうすればよいですか?
- 5. NVD3折れ線グラフで有効/無効データセットを設定するにはどうすればよいですか?
- 6. 単一の線グラフに異なるマーカーを設定するにはどうすればよいですか?
- 7. 文字列で指定されたフィールドを設定するにはどうすればよいですか?
- 8. Rで線形回帰勾配を設定するにはどうすればよいですか?
- 9. MATLABでプロットのデフォルトの線種を設定するにはどうすればよいですか?
- 10. UIViewでグラデーションの境界線を設定するにはどうすればよいですか?
- 11. ページ上で数十万のDOM要素を処理するにはどうすればよいですか?
- 12. RAM上のインデックスによって変数値を設定するにはどうすればよいですか?
- 13. 飛行機でホバリングで十字線が動かないようにする
- 14. Libharuでトランスフォーメーションマトリックスを設定するにはどうすればよいですか?
- 15. UIImageViewでUIGestureRecognizerを設定するにはどうすればよいですか?
- 16. ダイアログでButto.onClickListenerを設定するにはどうすればよいですか?
- 17. Glassfishでログレベルを設定するにはどうすればよいですか?
- 18. Razor:ValidationSummaryでクラスを設定するにはどうすればよいですか?
- 19. Dockerfileで$ PS1を設定するにはどうすればよいですか?
- 20. STOMPでActiveMQを設定するにはどうすればよいですか?
- 21. MEFでPrivateBinPathを設定するにはどうすればよいですか?
- 22. HttpWebRequest.GetRequestStreamでタイムアウトを設定するにはどうすればよいですか?
- 23. PhpStormでデータベースを設定するにはどうすればよいですか?
- 24. SimpleJdbcTemplateでsetQueryTimeoutを設定するにはどうすればよいですか?
- 25. スクラップスプラッシュでスプラッシュタイムアウトを設定するにはどうすればよいですか?
- 26. AndroidでReceiverを設定するにはどうすればよいですか?
- 27. PieChartでフォントサイズを設定するにはどうすればよいですか?
- 28. sbtでマルチステージテストパイプラインを設定するにはどうすればよいですか?
- 29. ミドルウェアでcurrent_userを設定するにはどうすればよいですか?
- 30. Androidでキープアライブタイムアウトを設定するにはどうすればよいですか?
感謝を!私のフォローアップの質問をチェックしてください:https://stackoverflow.com/questions/43723638/how-do-i-change-the-mouse-cursor-over-a-gtkdrawingarea-in-gtk3 – PintoDoido
[ gtk_widget_set_has_window() '](https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-set-has-window)は次のように述べています。「この関数はウィジェットの実装によってのみ呼び出されます。 init()関数で呼び出すことができます。 .... 'drawing_area'のためのコンテナとして' eventbox_box'は十分でしょうか? – Gerhardh
はい、GtkEventBoxを使用して、その内部にGtkDrawingAreaを追加することもできます。 GtkDrawingAreaをサブクラス化し、独自の新しい型のインスタンス初期化関数の中でgtk_widget_set_has_window()を呼び出すこともできます。既存のAPIでこれを行う方法はまだまだあります。 – ebassi