2012-08-15 6 views
0

當我使用windows經典主題設計wxWidgets對話窗口時,一切看起來都不錯。使用航空主題時,wxWidgets v2.9.4對話窗口需要更多空間

但是當我運行使用Aero主題的計算機上運行的應用程序,空間成爲擴大和項目開始消失在窗口的底部下方。

這是wxWidgets v2.9.4。下wxWidgets的v2.8.12不會發生此問題

這裏是同一個對話的截圖,航空在右側向左經典。注意使用航空時確定按鈕已經消失!

enter image description here

我怎樣才能解決這個問題?我希望對話元素的間隔在所有主題下都是相同的。

調用GetSizer() - >擬合()隱藏此問題,通過根據由發生這種情況中使用的主題所需要的空間大小調整整個窗口。不過,我想更好地理解這個問題。我以像素爲單位指定小部件周圍的邊框(5,10),並且字體大小似乎不會改變(我認爲),那麼一個主題如何使用比另一個主題更多的空間?一些奇怪的事情正在發生!

下面是演示問題的簡單對話框的代碼。

class cMyDialog : public wxDialog 
{ 
public: 
    cMyDialog() 
     : wxDialog(NULL,-1,L"Test Dialog") 
    { 
     wxStaticText * text = new wxStaticText(this,-1, 
      L"Lorem ipsum dolor sit amet,\n" 
      L"consectetur adipiscing elit.\n" 
      L"Nulla porta aliquam urna,\n" 
      L"in aliquam massa mattis at.\n" 
      L"Lorem ipsum dolor sit amet,\n" 
      L"consectetur adipiscing elit.\n" 
      L"Nunc ullamcorper euismod lacus vel condimentum.\n" 
      L"Sed id magna ac nisl placerat tristique eu sit amet lorem.\n" 
      ); 
     wxButton * button = new wxButton(this,-1,"OK"); 
     wxSizer * szr = new wxBoxSizer(wxVERTICAL); 
     szr->Add(text, 0, wxALL, 20); 
     szr->Add(button, 0, wxALL, 20); 
     SetSizer(szr); 

    } 
}; 

這是使用Windows經典設計,並與wxwidgets v2.9.3鏈接。它看起來像這樣當在同一主題上運行:

enter image description here

但是,如果你停止應用程序,主題更改爲航空,運行應用程序再次,它看起來像這樣:

enter image description here

注意OK按鈕幾乎從對話框的底部消失。

(另請注意,您必須停止應用程序,更改主題,並重新啓動應用程序。Sinmply更改主題,同時應用程序運行時不會造成任何問題。)

回答

-1

下的wxWidgets v2.9.4的默認字體大小是9分的時候,主題是「航空」,但它是8分的時候,主題爲「Windows經典」。在2.8.12版中,無論使用什麼主題,默認字體都是8點。

的結果是,如果我設計在同一主題下我的對話框的佈局,但用戶可以在使用不同的主題的應用程序,該對話框異地佈置。小部件需要更多或更少的空間,這取決於主題。最糟糕的問題是,我常規放置在對話框底部的OK/CANCEL按鈕將根據所選主題出現或消失。這會讓用戶感到不安!

顯式設置字體大小爲8分解決該問題。

(這是怎麼回事!!!!!!!!!!!!!!我無法想象做出這樣一個改變的理由,打破每一次升級的對話。)

顯然這是微軟的錯 - 他們改變了默認字體大小,以提高可讀性。 (http://en.wikipedia.org/wiki/Windows_Aero#Font)白癡!現在我必須在每個應用程序中指定字體大小,以便對話框的佈局不管最終用戶選擇什麼主題。嘆!

如果不是這樣的災難,它可能很有趣。 wxWidgets應該是跨平臺的,但現在它甚至不再是交叉主題。

+0

如果您正確創建對話框並將所有子控件插入sizer,然後調用對話框的sizer的Fit()方法,則應將所有內容放置到適當的位置,並將佔用所需的屏幕大小。佈局不會取決於字體大小,這應該不成問題。你可以嘗試爲UI使用DialogBlocks(至少要了解它應該如何創建,它會生成相當不錯的源代碼)。免費版的DilaogBlocks允許您在對話窗口放置30個項目。 – 2012-08-15 23:27:18

+0

當然佈局取決於字體大小!如果角色較大,那麼這些小部件必須更大以容納它們。 – ravenspoint 2012-08-16 00:10:11

+1

您不應該依賴字體大小的像素,它可以 - 也可以 - 在平臺之間甚至同一平臺的不同版本之間切換。在這個特殊情況下,它改變了,因爲2.8是錯誤的,請參閱http://trac.wxwidgets.org/ticket/11658 – 2012-08-17 13:20:51

1

嘗試使用GetSizer()->Fit()當你完成添加控件到佈局(see docs)。

+0

這看起來可能會隱藏問題。可能是最好的,可以做到的。 – ravenspoint 2012-08-15 19:51:03

+0

是的,這會掩蓋問題,如果有人使用需要更多空間的主題,則會使窗口變大。 +1現在,稍後如果沒有人提出更優雅的解決方案,將接受。 – ravenspoint 2012-08-15 19:55:49