gtk_window_get_position通常会做出最好的猜测,但你不能依赖它,因为
X Window 系统没有指定获取窗口管理器放置在窗口上的装饰的几何形状的方法。
(来自gtk_window_get_position 参考)
要查看该功能的运行情况,请尝试如下所示:
#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();
}
Run Code Online (Sandbox Code Playgroud)
编辑
如果您希望窗口出现在特定位置,您可以尝试以下操作:
gtk_window_move(GTK_WINDOW(window), 420, 180);
Run Code Online (Sandbox Code Playgroud)
但是上面的函数应该放在后面
gtk_widget_show_all(window);
Run Code Online (Sandbox Code Playgroud)
因为
大多数窗口管理器都会忽略对初始窗口位置的请求(而不是使用用户定义的放置算法)并在窗口显示后尊重请求。