2015-12-09 148 views
3

我试图挽救GTK窗口位置(绝对),以恢复它wehn我再次打开该应用程序了节约GTK窗口位置

这里是我到目前为止的代码:

gint x,y; 
    gtk_window_get_position(main_window,&x,&y); 
    printf("current position is:\nx: %i\ny:%i\n",x,y); 

此代码运行时在应用程序退出,我总是得到: 当前的位置是: X:0 Y:0

我在做什么错。

+1

[用于'gtk_window_get_position()的文档'答案详细这个问题。](https://developer.gnome.org/gtk3/stable/GtkWindow.html# GTK的窗口获得位置) – andlabs

回答

2

gtk_window_get_position通常做了最好的猜测,但你不能依赖它,因为

X Window系统没有指定的方式获得的 窗口管理器放置在窗口上的装饰几何。

(从gtk_window_get_position reference

在行动中看到的功能,你可以试试下面:

#include <gtk/gtk.h> 

int main(int argv, char* argc[]) 
{ 
    GtkWidget *window, *button; 
    gint x, y; 

    gtk_init(&argv, &argc); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window), "Test Window"); 
    button = gtk_button_new_with_label("Close"); 

    g_signal_connect(G_OBJECT(button), "clicked", 
      G_CALLBACK(gtk_main_quit), (gpointer)NULL); 
    gtk_container_set_border_width(GTK_CONTAINER(window), 10); 
    gtk_container_add(GTK_CONTAINER(window), button); 
    gtk_window_get_position(GTK_WINDOW(window), &x, &y); 

    printf("current position is:\nx: %i\ny:%i\n", x, y); 
    gtk_window_set_position(GTK_WINDOW(window), 
      GTK_WIN_POS_CENTER_ALWAYS); 
    gtk_window_get_position(GTK_WINDOW(window), &x, &y); 

    printf("new position is:\nx: %i\ny:%i\n", x, y); 
    gtk_widget_show_all(window); 


    gtk_main(); 
} 

编辑

如果你希望出现在窗口一个特定的位置,你可以尝试像这样:

gtk_window_move(GTK_WINDOW(window), 420, 180); 

然而上面的函数应该放置后

gtk_widget_show_all(window); 

因为

最窗口管理器忽略初始窗口位置 请求(而不是使用用户定义的布局算法)和荣誉已经显示窗口后请求 。

(从gtk_window_move reference

+0

当我用STE功能我: 0,0(前集) 583284(设定功能之后) 620370(当我关闭) 的是我总是得到620370无论我的窗口在哪里 –

+1

'GTK_WIN_POS_CENTER_ALWAYS'意味着'始终居中窗口'。你可以使用'gtk_window_move(GTK_WINDOW(window),x,y)'将窗口移动到更具体的位置。即给你自己的x和y的整数值。看我的编辑@AdelAhmed。 – sjsam

+0

移动工程就像一个魅力,如果我移动窗口,但我不能再获得它的坐标:( –