當我使用windows經典主題設計wxWidgets對話窗口時,一切看起來都不錯。使用航空主題時,wxWidgets v2.9.4對話窗口需要更多空間
但是當我運行使用Aero主題的計算機上運行的應用程序,空間成爲擴大和項目開始消失在窗口的底部下方。
這是wxWidgets v2.9.4。下wxWidgets的v2.8.12不會發生此問題
這裏是同一個對話的截圖,航空在右側向左經典。注意使用航空時確定按鈕已經消失!
我怎樣才能解決這個問題?我希望對話元素的間隔在所有主題下都是相同的。
調用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鏈接。它看起來像這樣當在同一主題上運行:
但是,如果你停止應用程序,主題更改爲航空,運行應用程序再次,它看起來像這樣:
注意OK按鈕幾乎從對話框的底部消失。
(另請注意,您必須停止應用程序,更改主題,並重新啓動應用程序。Sinmply更改主題,同時應用程序運行時不會造成任何問題。)
如果您正確創建對話框並將所有子控件插入sizer,然後調用對話框的sizer的Fit()方法,則應將所有內容放置到適當的位置,並將佔用所需的屏幕大小。佈局不會取決於字體大小,這應該不成問題。你可以嘗試爲UI使用DialogBlocks(至少要了解它應該如何創建,它會生成相當不錯的源代碼)。免費版的DilaogBlocks允許您在對話窗口放置30個項目。 – 2012-08-15 23:27:18
當然佈局取決於字體大小!如果角色較大,那麼這些小部件必須更大以容納它們。 – ravenspoint 2012-08-16 00:10:11
您不應該依賴字體大小的像素,它可以 - 也可以 - 在平臺之間甚至同一平臺的不同版本之間切換。在這個特殊情況下,它改變了,因爲2.8是錯誤的,請參閱http://trac.wxwidgets.org/ticket/11658 – 2012-08-17 13:20:51