wxWidgetsのバージョンやプラットフォーム/コンパイラに関する情報を提供しなかったので、wxWidgets2.8とMSWについて回答します。
プラットフォームごとに最適なサイズが異なる可能性があるため、指定したサイズが必ずしもコントロールに使用されるとは限りません。Windowsでも、サイズは通常、デフォルトのGUIフォントによって異なります。そのため、wxWidgetsには、ウィンドウが最小、最適、または最大サイズを指定できるようにするさまざまなメソッドがあります。特別な要件がある場合は、それらの一部をオーバーライドする必要がある場合があります。
wxControl
あなたの問題では、コントロールのサイズをデフォルトの最適サイズである:よりも小さくしたいようです。
wxSize wxControl::DoGetBestSize() const
{
return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT);
}
(から取得src/msw/control.cpp
)と値
#define DEFAULT_ITEM_WIDTH 100
#define DEFAULT_ITEM_HEIGHT 80
(から取得include/wx/msw/private.h
)。
オーバーライドDoGetBestSize()
して目的のサイズを返すと、機能するはずです。
編集:
DoGetBestSize()
では仮想ではないため、オーバーライドできないとコメントしていますwxControl
。それはで紹介されているので、それはですがwxWindow
:
// get the size which best suits the window: for a control, it would be
// the minimal size which doesn't truncate the control, for a panel - the
// same size as it would have after a call to Fit()
virtual wxSize DoGetBestSize() const;
(から取得include/wx/window.h
)。wxWindow
はの親クラスでwxControl
あるため、メソッドは実際に仮想であり、もちろんオーバーライドできます。ソースのがあなたに示すように、多くのコントロールは実際にそうしgrep
ます。