我找不到如何做到这一点:(有gtk_window_set_resizable,但它根本禁用调整大小,我仍然希望我的窗口水平调整大小。有什么想法吗?
问问题
1946 次
3 回答
8
我相信您可以尝试使用gtk_window_set_geometry_hints函数并为您的窗口指定最大和最小高度。在这种情况下,您仍然允许更改宽度,而高度将保持不变。请检查以下示例是否适合您:
int main(int argc, char * argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GdkGeometry hints;
hints.min_width = 0;
hints.max_width = gdk_screen_get_width(gtk_widget_get_screen(window));;
hints.min_height = 300;
hints.max_height = 300;
gtk_window_set_geometry_hints(
GTK_WINDOW(window),
window,
&hints,
(GdkWindowHints)(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
gtk_widget_show_all(window);
gtk_main();
return 0;
}
希望这会有所帮助,问候
于 2011-02-04T03:55:33.893 回答
0
这是我在 GTK 中的实现#
public static void SetFixedDimensions (
Window window, bool vertical, bool horizontal)
{
int width, height;
window.GetSize(out width, out height);
var hintGeometry = new Gdk.Geometry();
hintGeometry.MaxHeight = vertical ? height : Int32.MaxValue;
hintGeometry.MinHeight = vertical ? height : 0;
hintGeometry.MaxWidth = horizontal ? width : Int32.MaxValue;
hintGeometry.MinWidth = horizontal ? width : 0;
window.SetGeometryHints(window, hintGeometry, Gdk.WindowHints.MaxSize);
}
于 2015-01-14T10:53:41.697 回答
0
基于@serge_gubenko 的回答,如果您只想在初始布局后禁止垂直调整大小,则需要为 signal 设置回调size-allocate
。
例子:
static gint signal_connect_id_cb_dialog_size_allocate;
static void
cb_dialog_size_allocate (GtkWidget *window,
GdkRectangle *allocation,
gpointer user_data)
{
GdkGeometry hints;
g_signal_handler_disconnect (G_OBJECT (dialog),
signal_connect_id_cb_dialog_size_allocate);
/* dummy values for min/max_width to not restrict horizontal resizing */
hints.min_width = 0;
hints.max_width = G_MAXINT;
/* do not allow vertial resizing */
hints.min_height = allocation->height;
hints.max_height = allocation->height;
gtk_window_set_geometry_hints (GTK_WINDOW (window), (GtkWidget *) NULL,
&hints,
(GdkWindowHints) (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
}
int main(int argc, char * argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
signal_connect_id_cb_dialog_size_allocate =
g_signal_connect (G_OBJECT (state->dialog),
"size-allocate",
G_CALLBACK (cb_dialog_size_allocate),
(gpointer) NULL /* user_data */);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
于 2017-02-05T07:56:15.567 回答