当我使用 windows 经典主题设计 wxWidgets 对话窗口时,一切看起来都不错。
但是,当我在使用 aero 主题的机器上运行该应用程序时,空间会变大,并且项目开始在窗口底部下方消失。
这是 wxWidgets v2.9.4。wxWidgets v2.8.12下不会出现问题
这是同一对话框的屏幕截图,左侧为航空经典,右侧为经典。注意使用 aero 时 OK 按钮是如何消失的!
我怎么解决这个问题?我希望对话框元素的间距在所有主题下都相同。
调用 GetSizer()->Fit() 可以隐藏这个问题,方法是根据碰巧使用的主题所需的空间调整整个窗口的大小。但是,我想更好地理解这个问题。我以像素(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 链接。在同一主题下运行时看起来像这样:
但是,如果你停止应用程序,将主题更改为 aero,再次运行应用程序,它看起来像这样:
注意确定按钮几乎从对话框底部消失了。
(还要注意,您必须停止应用程序,更改主题,然后重新启动应用程序。只需在应用程序运行时更改主题即可。)