移动窗口超出约束
Gtk Move window beyond constraints
我目前正在编写一个使用自定义标题栏的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_allocation
和size_allocate
,这两个根本没有任何改变。
我的问题是,你知道一种方法,要么能够移动窗口超出屏幕边界(不是完全,但在某种程度上,窗口不是完全在屏幕上),或改变窗口的大小,而不调整其内容?
如果您使用的是GTK 3.10或更新版本,您可以使用gtk_window_set_titlebar
gtk_window_set_titlebar (GtkWindow *window, GtkWidget *titlebar)
您需要的唯一参数是您想要定制的窗口和GtkWidget将用作标题栏。建议使用GtkHeaderBar,但在您的情况下,您可以使用任何自定义GtkWidget并获得可拖动的工具条,它将拖动整个窗口,就像从窗口管理器中拖动一样。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- 函数作为模板参数,是否对返回类型强制约束
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 约束和显式模板实例化
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- IpOpt拒绝解决不受约束的问题
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- 使用C++模板时表达约束
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 获取 SFML 窗口的 HWND 和高可用性?
- 移动窗口超出约束