2011-10-17 51 views
0

我正在使用GTK#GUI框架在C#中編寫應用程序,使其跨平臺。 許多事情正在GTK中完成#不像在WPF/Windows.Forms中,但其中大多數我都能夠自己解決。如何在程序啓動時正確恢復Gtk窗口大小?

有一個「小」的問題,當我試圖解決這個問題時,變得不那麼「小」。 我正在關閉應用程序時保存窗口位置和最大化標誌配置文件。 但是,當我試圖恢復窗口參數,他們正在恢復不正確。

方法我試過用:

SetSizeRequest():

this.SetSizeRequest((int)config["windowwidth"], (int)config["windowheight"]); 

SetDefaultSize():

this.SetDefaultSize((int)config["windowwidth"], (int)config["windowheight"]); 

調整大小():

this.Resize((int)config["windowwidth"], (int)config["windowheight"]); 

的問題是: 其中一些方法根本不起作用(不會改變任何內容)。其他奇怪的行爲:設置窗口大小以不從配置加載的一個,使窗口不斷擴大等

我也加入一個特定部件的尺寸約束:

Gdk.Geometry geom = new Gdk.Geometry(); 
geom.MinWidth = 800; 
geom.MinHeight = 400; 
this.SetGeometryHints(BoxNotebook, geom, Gdk.WindowHints.MinSize); 

當我使用所有這一切,它變得完全混亂。 程序啓動時恢復窗口大小的正確方法是什麼?

回答

1

Resize適用於我的應用程序。你確定正在從配置文件加載正確的值嗎?

編輯

這裏是一塊空地文件,似乎你想要做什麼:

<?xml version="1.0"?> 
<interface> 
    <object class="GtkWindow" id="window"> 
    <child> 
     <object class="GtkHPaned" id="hpaned"> 
     <child> 
      <object class="GtkNotebook" id="notebook"> 
      <property name="width_request">300</property> 
      <child> 
       <object class="GtkScrolledWindow" id="scrolledwindow"> 
       <child> 
        <object class="GtkTreeView" id="treeview"/> 
       </child> 
       </object> 
      </child> 
      <child type="tab"> 
       <object class="GtkLabel" id="label1"> 
       <property name="label">300 px wide</property> 
       </object> 
       <packing> 
       <property name="tab_fill">False</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="resize">True</property> 
      <property name="shrink">False</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="label2"> 
      <property name="width_request">400</property> 
      <property name="label">400 px wide</property> 
      </object> 
      <packing> 
      <property name="resize">False</property> 
      <property name="shrink">False</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 
+0

嗯,我這樣做,在窗口的構造函數,生成()調用之後。可能是錯的。可能是我應該做一些窗口信號處理程序?激活或其他? – mephisto123

+0

好吧,它在我調用win.Show()後從Main()調用它時起作用。 儘管有時候,當兒童小部件的請求很高時,窗口會開始橫向拉伸。 有沒有辦法限制最大窗口寬度? 我不喜歡窗口寬度超過屏幕寬度。 – mephisto123

+0

我在我的窗口構造函數中使用了'Resize',並且它可以工作。也許你想把太多的東西塞進一個窗口?兒童的申請何時變得太大?你可以通過在'ScrolledWindow's中放置一些東西來解決它嗎? – ptomato

相關問題