0

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]ボタンがほとんど消えていることに注目してください。

(また、アプリを停止し、テーマを変更して、アプリを再起動する必要があることに注意してください。アプリの実行中にテーマを変更するだけで問題は発生しません。)

4

2 に答える 2

2

GetSizer()->Fit()レイアウトへのコントロールの追加が完了したら、使用してみてください( docs を参照)。

于 2012-08-15T19:44:48.463 に答える
-1

wxWidgets v2.9.4 でのデフォルトのフォント サイズは、テーマが「aero」の場合は 9 ポイントですが、テーマが「windows classic」の場合は 8 ポイントです。v2.8.12 では、使用されているテーマに関係なく、デフォルトのフォントは 8 ポイントです。

その結果、ダイアログ レイアウトを 1 つのテーマで設計しても、ユーザーが別のテーマを使用してアプリを実行すると、ダイアログのレイアウトが異なります。ウィジェットは、テーマに応じて多かれ少なかれスペースを必要とします。最悪の問題は、私が従来ダイアログの下部に配置していた OK/CANCEL ボタンが、選択したテーマに応じて表示または非表示になることです。これはユーザーを混乱させます。

フォント サイズを明示的に 8 ポイントに設定すると、問題が解決します。

(これがどうなるか!!!!!!!!!!!!!! アップグレードされたすべてのダイアログを壊して、そのような変更を行う正当な理由が想像できません。)

どうやらそれはマイクロソフトのせいです - 彼らは「読みやすさを向上させるために」デフォルトのフォントサイズを変更しました。( http://en.wikipedia.org/wiki/Windows_Aero#Font ) ばかだ! ここで、すべてのアプリケーションでフォント サイズを指定する必要があります。これにより、エンド ユーザーが選択したテーマに関係なく、ダイアログのレイアウトが同じになります。はぁ!

あんな大惨事じゃなかったら面白いかも。wxWidgets はクロスプラットフォームであるはずですが、もはやクロステーマではありません。

于 2012-08-15T21:48:41.870 に答える