Windowsのクラシックテーマを使用してwxWidgetsダイアログウィンドウをデザインすると、すべて問題なく表示されます。
しかし、Aeroテーマを使用するマシンでアプリを実行すると、スペースが拡大し、ウィンドウの下部からアイテムが消え始めます。
これはwxWidgetsv2.9.4です。この問題はwxWidgetsv2.8.12では発生しません
これは同じダイアログのスクリーンショットで、左側がエアロ、右側がクラシックです。エアロを使用すると、[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を使用して設計され、wxwidgetsv2.9.3とリンクされています。同じテーマで実行すると、次のようになります。
ただし、アプリを停止し、テーマをaeroに変更すると、アプリを再度実行すると次のようになります。
ダイアログの下部から[OK]ボタンがほとんど消えていることに注目してください。
(また、アプリを停止し、テーマを変更して、アプリを再起動する必要があることに注意してください。アプリの実行中にテーマを変更するだけで問題は発生しません。)