C语言 如何创建没有标题栏的gtk+窗口,并使resize和move属性正常工作

tjvv9vkg  于 2023-02-03  发布在  其他
关注(0)|答案(2)|浏览(266)

如何创建gtk+没有标题栏的窗口,并且可以使用调整大小和移动属性。我检查了gtk_window_set_decorated函数,但是它禁用了窗口的调整大小和移动属性。我已经找到了这个答案,但是我不认为它与此有任何关系。
我尝试在gtk_window_set_decorated后将resizeable设置为true,但仍然不起作用
请检查代码

#include <gtk/gtk.h>
    int main (int argc,
    char *argv[])
    {  
      GtkWidget *window;
      /* Initialize GTK+ and all of its supporting libraries. */
      gtk_init (&argc, &argv);
      /* Create a new window, give it a title and display it to the user. */
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Hello World");
      gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
      gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
      //gtk_window_set_gravity(GTK_WINDOW (window), GDK_GRAVITY_NORTH_EAST);
      //gtk_window_set_deletable (GTK_WINDOW (window), FALSE);
      gtk_widget_show (window);
      /* Hand control over to the main loop. */
      gtk_main ();
      return 0;
    }
lrpiutwd

lrpiutwd1#

所以我发现有效的方法是在gtk_window_set_decorated设置为FALSE的情况下删除标题,然后手动改变光标并调用gtk_window_begin_resize_drag()在鼠标按下时开始调整大小。
我实现这个的方法是检查鼠标是否靠近mousemove回调的边界,如果是,用gdk_window_set_cursor()更改光标。
当鼠标按下事件发生在边界附近时,我调用带有适当边界的gtk_window_begin_resize_drag()

chhqkbe1

chhqkbe12#

您可以使用GTK_WINDOW_POPUP:

#include <gtk/gtk.h>
    int main (int argc,
    char *argv[])
    {  
      GtkWidget *window;
      /* Initialize GTK+ and all of its supporting libraries. */
      gtk_init (&argc, &argv);
      gtk_widget_show (window);
      gtk_main ();
      return 0;
    }

如果只想关闭窗口的窗口管理器装饰,则不应使用GTK_WINDOW_POPUP。相反,使用gtk_window_set_decorated(GtkWindow *window,gboolean show)来关闭窗口装饰。

相关问题