我目前正在编写一个使用自定义标题栏的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;
}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,除了它不能将窗口移动到屏幕范围之外,就像其他窗口的正常行为一样,所以你可以将它"拖出视线"以便为其他人设置位置.
我试图通过调用触摸屏幕来调整窗口的大小,window.resize(width, height)但这不是我打算做的事情,因为调整大小也会将窗口内容调整到较小的比例,而我只想使其物理尺寸更小.我一直在使用也试过set_allocation和size_allocate,这两个didnt做任何改变的.
我的问题是,你知道一种方法可以将窗口移出屏幕边界(不完全,但窗口不完全在屏幕上),或改变窗口大小而不调整大小它的内容?
如果您使用 GTK 3.10 或更高版本,您可以使用gtk_window_set_titlebar
gtk_window_set_titlebar (GtkWindow *window, GtkWidget *titlebar)您需要的唯一参数是您想要自定义的窗口和将用作标题栏的GtkWidget 。建议使用GtkHeaderBar,但在您的情况下,您可以使用任何自定义GtkWidget并获取可拖动栏,该栏将像窗口管理器中的那样拖动整个窗口。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |