如何移动带有本地寡妇api的Gtk::窗口



背景

我正在用Gtkmm4在C++中开发一个应用程序。我正在创建一个Gtk::Window。现在我想把这个窗口移到屏幕的中心。Gtkmm3中存在Gtk::Window::set_positionGtk::Window::move等方法,但在Gtkmm4中被去除。我已经算出了如何从Gdk::Display中获得屏幕大小,并计算位置。但是,我必须使用特定于平台的API来移动我的窗口。在Linux上,有X11和Wayland,我知道如何使用它们。

问题

如何使用原生windows API将Gtk::Window移动到屏幕上的特定位置?

根据此来源:

GDK将gdk_win32_window_get_handle()导出为公共符号,但其声明在公共标头中不可用,因此您必须自己定义:

HGDIOBJ gdk_win32_window_get_handle (GdkWindow *window);

似乎还提供了<gdk/gdkwin32.h>标头,这使得宏GDK_WINDOW_HWND可以稍微简化一些。此处提供了一个示例。

获取HWND的方法已更改。信息可以在这里阅读。

就我个人而言,以下脚本在窗口创建功能中运行得很好(使用gtkmm4(:

//Create GTK window
auto win = new Window();
add_window(*win);
win->show();
//Take HWND
auto surface = win->get_surface()->gobj();
auto hWnd= (HWND)GDK_SURFACE_HWND(surface);

最新更新