Sobald Ihr Widget (bei einer Größe je nachdem, was es übergeordneten Container kann es geben) realisiert wurden Sie sollten in der Lage sein, diese Werte mit widget->allocation.width
und widget->allocation.height
zu bekommen.
Es ist nichts falsch in der Art, wie GTK dies tut. Es gibt einen Unterschied zwischen der Größe eines Widgets und der tatsächlichen Größe. Daher ist das Timing beim Lesen dieser Werte wichtig. Methoden für diese Variablen zu erhalten, ändert nicht die Tatsache, dass sie noch nicht initialisiert sind.
Die übliche Art und Weise Menschen um diese zu gehen, ist in die size-allocate
Signal tippen, die ausgegeben wird, wenn das Widget eine neue tatsächliche Größe bekam. Etwas wie folgt aus:
void my_getsize(GtkWidget *widget, GtkAllocation *allocation, void *data) {
printf("width = %d, height = %d\n", allocation->width, allocation->height);
}
Und in der Hauptschleife irgendwo, schließen Sie das Signal:
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);
Ich mache 'gtk_widget_show' vor dem Aufruf dieser Funktion. aber ich ding zu der Zeit ist es nicht wirklich auf dem Bildschirm gezeichnet (wie dort Eltern wurde nicht gezeigt), aber ich brauche diese Parameter, bevor es auf dem Bildschirm gezeichnet, wie ich diese Werte zu einem anderen Prozess übergeben muss. wie bekomme ich es? – User7723337
@PP: Ich glaube nicht, dass Sie wissen können, bevor das eigentliche Layout passiert. Vielleicht können Sie Ihr Design ändern, damit der andere Prozess die Koordinaten erhalten kann, sobald sie bekannt sind? – unwind