c - 保存 gtk 窗口位置

标签 c linux gtk

我正在尝试保存 gtk 窗口位置(绝对)以便在我再次打开应用程序时恢复它

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

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

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

我做错了什么。

最佳答案

gtk_window_get_position 通常会做出最佳猜测,但您不能依赖它,因为

the X Window System does not specify a way to obtain the geometry of the decorations placed on a window by the window manager.

(来自 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);

因为

most window managers ignore requests for initial window positions (instead using a user-defined placement algorithm) and honor requests after the window has already been shown.

(来自 gtk_window_move reference)

关于c - 保存 gtk 窗口位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168786/

相关文章:

c - STM32:使用 DMA 接收 SPI 数据 - Rx 缓冲区中的字节数总是错误的

c - Linux:如何修改 ELF 二进制文件动态部分中的共享库名称

linux - 通过 nghttp2 使用支持 HTTP\2 的 cURL 连接到 Apple 的 APNS

linux - 我如何防止 gdb 捕获 control-D?

c - GLib 中的可变超时

c# - MonoDevelop 2.4.1 未在 Windows 7 上运行最终无法加载 glibsharpglue-2

python Matplotlib gtk - 使用 FuncAnimation 绘制动画图

Python OpenSSL C 扩展 : undefined symbol: AES_set_encrypt_key

c - 在 C 函数之间传递数字

c - 为什么这在 MinC 是非法的?如何纠正?