如何创建没有标题栏的 gtk+ 窗口,调整大小和移动属性有效

use*_*306 7 c gtk

如何创建没有标题栏的 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;
    }
Run Code Online (Sandbox Code Playgroud)

小智 2

所以我发现有效的方法是删除gtk_window_set_decorated设置为 FALSE 的标头。然后手动更改光标并调用gtk_window_begin_resize_drag()以在鼠标按下时开始调整大小。

我的实现方法是检查鼠标是否靠近 mousemove 回调的边框,如果是,则使用 更改光标gdk_window_set_cursor()

在边界附近的 mousedown 事件中,我gtk_window_begin_resize_drag()使用适当的边界进行调用。