【问题标题】:Computing border size of GtkFrame when window isn't visible当窗口不可见时计算 GtkFrame 的边框大小
【发布时间】:2016-03-20 15:32:50
【问题描述】:

我想计算GtkFrame 的左边框和上边框大小。我使用以下代码:

static void computeborder(GtkWidget *frame)
{
    GtkAllocation alloc, child_alloc;
    int borderTop, borderLeft;

    gtk_widget_get_allocation(frame, &alloc);
    GTK_FRAME_GET_CLASS(frame)->compute_child_allocation(GTK_FRAME(frame), &child_alloc);

    borderTop = child_alloc.y - alloc.y;
    borderLeft = child_alloc.x - alloc.x;

    printf("BORDER TOP: %d BORDER LEFT %d\n", borderTop, borderLeft);
}

这可以正常工作,但只有如果托管GtkFrame 的顶级窗口已经显示。但是,我需要在显示包含我的GtkFrame 小部件的顶级窗口之前了解边框大小。

如果包含我的GtkFrame 的顶层窗口尚未打开,则(-1,-1)alloc 中返回,(1,1)child_alloc 中返回。如果顶层窗口已经打开,则返回正确的尺寸,我可以计算边框尺寸。

但是,当顶层窗口被隐藏时,我需要计算边框大小。那么在这种情况下如何计算我的GtkFrame 的边框大小呢?

我正在使用 GTK 2。

【问题讨论】:

  • 您现在需要尺寸吗?如果你可以推迟计算直到窗口已经realized, mapped, or shown,你可能会得到正确的分配数据。
  • 不幸的是,我不能推迟计算,直到窗口已经实现。有没有办法在实现之前获得尺寸?

标签: linux gtk gtk2


【解决方案1】:

这些值取决于实现,因为它们需要有关目标显示器等的信息。理论上,不同的显示器可以有不同的设置,这会使尺寸发生变化。

在请求尺寸之前,您可以在顶层窗口尝试gtk_widget_realize()gtk_widget_map() 或两者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2011-02-25
    • 1970-01-01
    • 2023-03-04
    • 2017-03-25
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多