我试图挽救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
我在做什么错。
我试图挽救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
我在做什么错。
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);
因为
最窗口管理器忽略初始窗口位置 请求(而不是使用用户定义的布局算法)和荣誉已经显示窗口后请求 。
当我用STE功能我: 0,0(前集) 583284(设定功能之后) 620370(当我关闭) 的是我总是得到620370无论我的窗口在哪里 –
'GTK_WIN_POS_CENTER_ALWAYS'意味着'始终居中窗口'。你可以使用'gtk_window_move(GTK_WINDOW(window),x,y)'将窗口移动到更具体的位置。即给你自己的x和y的整数值。看我的编辑@AdelAhmed。 – sjsam
移动工程就像一个魅力,如果我移动窗口,但我不能再获得它的坐标:( –
[用于'gtk_window_get_position()的文档'答案详细这个问题。](https://developer.gnome.org/gtk3/stable/GtkWindow.html# GTK的窗口获得位置) – andlabs