4

C++ で C スタイルの GTK 関数を使用していますが、メイン ウィンドウにカーソルを設定する方法がわかりません。

4

5 に答える 5

8

使用するgdk_set_cursor()

( https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#gdk-window-set-cursor )

によって作成された GdkCursor でgdk_cursor_new()

( https://developer.gnome.org/gdk3/stable/gdk3-Cursors.html )

于 2012-04-21T17:55:28.770 に答える
5

GdkWndow の取得に関するコメントがこれまでに回答されていないため、これを投稿します。

ほとんどのウィジェットでは、GdkWindow を GtkWidget 構造体のウィンドウ データ フィールドとして取得できます。次のコードは、GtkWindow ウィジェットにカーソルを設定します。

GtkWidget* win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GdkCursor* watchCursor = gdk_cursor_new(GDK_WATCH);

/* set watch cursor */
gdk_window_set_cursor(win->window, watchCursor);

/* return to normal */
gdk_window_set_cursor(win->window, NULL);

子ウィジェットの 1 つから GtkWindow 祖先にアクセスする必要がある場合は、次を使用できます。

GtkWidget* win = gtk_widget_get_ancestor(someWidget, GTK_TYPE_WINDOW);
于 2012-07-06T22:54:39.657 に答える
1

私の解決策:

void gtkSetCursor(GdkCursorType cursorType) {
    GdkScreen * screen = gdk_screen_get_default();
    GdkWindow * win = gdk_screen_get_root_window(screen);
    GdkCursor * cursor = gdk_cursor_new(cursorType); //http://developer.gimp.org/api/2.0/gdk/gdk-Cursors.html
    gdk_window_set_cursor(win, cursor);
    while (gtk_events_pending()) gtk_main_iteration();
}

...
gtkSetCursor(GDK_WATCH);
start your stuff here
...
end of your stuff
gtkSetCursor(GDK_LEFT_PTR);
于 2016-04-06T18:20:25.180 に答える
0

ジェフの答えはうまくいきませんでした(Gtk3)。だからここに私の解決策があります:

GdkWindow* win = gtk_widget_get_parent_window(widget);
GdkCursor* watchCursor = gdk_cursor_new(GDK_WATCH);
gdk_window_set_cursor(win, watchCursor);
于 2014-05-24T13:31:28.537 に答える