2011-02-03 8 views
4

の垂直方向のサイズ変更を禁止する 任意のアイデアのGtk:私はそこgtk_window_set_resizableだが、それがすべてでリサイズ無効にして、私はまだ私のウィンドウを水平にサイズを変更したい:(ことを行う方法を見つけることができないのGtkWindow

+0

あなたはgtk_window_set_resizable() ''に渡している2番目のパラメータは何ですか? – Mahesh

+0

偽、他のオプションはありません – Daniel

答えて

5

を私は信じています。?あなたはgtk_window_set_geometry_hints機能を使って試してみて、あなたの窓のための最大と最小の高さを指定することができます。この場合、あなたはまだ高さに対し幅の変化が一定にとどまる以下の例では、あなたのために働くかどうplsは、チェックできるようになります。。

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; 
} 

これが助けたいと願って、

+0

ありがとうございます。魅力のように働く – Daniel

0
あなたが唯一の初期レイアウト後の垂直サイズ変更を禁止したい場合

は、ここでは、信号size-allocateのセットアップにコールバックが必要になります、@のserge_gubenkoの回答時に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); 
} 
0

ビルです。

例:

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; 
} 
関連する問題

 関連する問題