如何使用本机寡妇 api 移动 Gtk::Window?

Posted

技术标签:

【中文标题】如何使用本机寡妇 api 移动 Gtk::Window?【英文标题】:How to move a Gtk::Window with native widows api? 【发布时间】:2021-01-14 15:32:17 【问题描述】:

背景

我正在使用 Gtkmm 4 用 C++ 开发一个应用程序。我正在创建一个 Gtk::Window。现在我想将此窗口移动到屏幕的中心。在Gtkmm 3中有Gtk::Window::set_positionGtk::Window::move等方法,但在Gtkmm 4中被删除了。我已经研究了如何从Gdk::Display获取屏幕尺寸,并计算位置。 但是,我必须使用特定于平台的 API 来移动我的窗口。在 Linux 上,有 X11 和 Wayland,我知道如何使用它们。

问题

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

【问题讨论】:

不以编程方式移动窗口是有充分理由的,这可能是删除set_positionmove 的原因。您是否想过拥有多个屏幕的用户?平铺窗口管理器呢?如果你真的确定要写破代码,可以使用WinAPI的SetWindowPos函数。 @YakovGalka SetWindowPos 将窗口句柄 (HWND) 作为第一个参数。如何将 Gtk::Window 转换为 windows 窗口句柄? @frederic this 有帮助吗? @BobMorane 是的,谢谢,这正是我搜索的内容!如果你用它来回答,我会接受它。 @BobMorane 我已经发现自己:因为我在 Linux 上,这个头文件已经下载但当然没有安装!请根据您的研究做出回答,以便我接受 【参考方案1】:

根据this source:

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

HGDIOBJ gdk_win32_window_get_handle (GdkWindow *window);

似乎<gdk/gdkwin32.h> 标头也可用,这使得宏GDK_WINDOW_HWND 可用于简化一些事情。提供了一个示例here。

【讨论】:

以上是关于如何使用本机寡妇 api 移动 Gtk::Window?的主要内容,如果未能解决你的问题,请参考以下文章

允许从本机客户端访问api

Rails api 和本机移动应用程序身份验证

如何识别 XCUITest 在 xcode 中运行时抛出的一些随机寡妇

Google Maps Javascript API V3 在移动/本机应用程序上找不到 404

text 使用jQuery删除WordPress中的寡妇

如何使用 Jclouds 1.7 访问本机提供程序 API