如何使用本机寡妇 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_position
和Gtk::Window::move
等方法,但在Gtkmm 4中被删除了。我已经研究了如何从Gdk::Display
获取屏幕尺寸,并计算位置。
但是,我必须使用特定于平台的 API 来移动我的窗口。在 Linux 上,有 X11 和 Wayland,我知道如何使用它们。
问题
如何使用原生 Windows API 将 Gtk::Window
移动到屏幕上的特定位置?
【问题讨论】:
不以编程方式移动窗口是有充分理由的,这可能是删除set_position
和move
的原因。您是否想过拥有多个屏幕的用户?平铺窗口管理器呢?如果你真的确定要写破代码,可以使用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?的主要内容,如果未能解决你的问题,请参考以下文章
如何识别 XCUITest 在 xcode 中运行时抛出的一些随机寡妇