gpt4 book ai didi

c++ - Gtk 移动窗口超出约束

转载 作者:行者123 更新时间:2023-12-04 11:33:18 24 4
gpt4 key购买 nike

我目前正在编写一个使用自定义标题栏的 gtk 程序(即,它没有被窗口管理器装饰)。但是由于使用自定义标题栏也禁用了对拖动窗口的支持,我编写了自定义拖动函数,通过调用 window.move(x, y) 来移动窗口。 :

bool on_titlebar_drag(GdkEvent* event)
{
static int drag_x_offset = 0;
static int drag_y_offset = 0;
int x, y;

if (event->type == GDK_BUTTON_PRESS)
{
drag_x_offset = event->button.x;
drag_y_offset = event->button.y;
} else if(event->type == GDK_BUTTON_RELEASE) {
drag_x_offset = 0;
drag_y_offset = 0;
} else if(event->type == GDK_MOTION_NOTIFY) {
x = event->motion.x_root - drag_x_offset;
y = event->motion.y_root - drag_y_offset;
mainWindow.move(x, y);
}

return true;
}

这工作得很好,除了它不能将窗口移动到屏幕限制之外,就像其他窗口的正常行为一样,所以你可以将它拖到“看不见”的地方,为其他人腾出空间。

我正在尝试通过调用 window.resize(width, height) 在触摸屏幕后立即将窗口调整为更小。但这不是我打算做的,因为调整大小也会将窗口内容调整为更小的比例,而我只想使其物理尺寸更小。
我也试过使用 set_allocationsize_allocate ,这两个根本没有任何改变。

我的问题是,您是否知道一种方法可以将窗口移动到屏幕边界之外(不是完全,而是以窗口未完全显示在屏幕上的方式),或者在不调整大小的情况下更改窗口大小它的内容?

最佳答案

如果您使用的是 GTK 3.10 或更新版本,您可以使用 gtk_window_set_titlebargtk_window_set_titlebar (GtkWindow *window, GtkWidget *titlebar)您需要的唯一参数是您要自定义的窗口和将用作标题栏的 GtkWidget。使用 GtkHeaderBar建议使用,但在您的情况下,您可以使用任何自定义 GtkWidget 并获得可拖动栏,这将像窗口管理器中的那样拖拽整个窗口。

关于c++ - Gtk 移动窗口超出约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com