wxFormBuilder を使う(3)「Window の中央にパーツを配置」

FlexGridSizerを使えばWindowを最大にしても、デフォルトに戻してもパーツを中央に表示させることが出来ます。

  • オブジェクトツリー

  • 最初にFrameを配置して次にBoxSizerを配置。この BoxSizer の orient を wxVERTICALにしてパーツを追加していくとFrameと同じ幅のスペースが確保されるイメージ。1個のスペースなのでXRC出力は省略されています。
  • BoxSizer の中にコントロールのコレクションをグループ化するための Panel を配置します。
  • Panelの中に行指定、列指定でサイズの変更が可能FlexGridSizerを配置します。FlexGridSizerを使うと、フレキシブルな部分とそうでない部分を混在させてレイアウトできるようになるそうです。(wxRubyのこと/Hello Worldをつくる3) FlexGridSizerには、フレキシブルにする位置を指定するためのgrowablecols、growablerowsというパラメータがあります。このgrowablerows と growablecolsを0にセット。
  • FlexGridSizer の中に BoxSizer を配置します。 BoxSizer の orient を wxVERTICALにして、StaticText、Buttonを追加します。
  • オブジェクトツリーの bSizer2 wxBoxSizerを選択して、Align Left、Align Center Horizontally、Align Right、Align Top、Align Center Vertically、Align Bottom ボタンを押すせば移動します。このXRCは Align Center Horizontally、Align Center Vertically を選択した状態で出力したものです。
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1">
	<object class="wxFrame" name="MyFrame1">
		<style>wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL</style>
		<size>250,150</size>
		<title></title>
		<centered>1</centered>
		<aui_managed>0</aui_managed>
		<object class="wxPanel" name="m_panel1">
			<style>wxTAB_TRAVERSAL</style>
			<object class="wxFlexGridSizer">
				<rows>0</rows>
				<cols>1</cols>
				<vgap>0</vgap>
				<hgap>0</hgap>
				<growablecols>0</growablecols>
				<growablerows>0</growablerows>
				<object class="sizeritem">
					<option>0</option>
					<flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
					<border>5</border>
					<object class="wxBoxSizer">
						<orient>wxVERTICAL</orient>
						<object class="sizeritem">
							<option>0</option>
							<flag>wxALL|wxALIGN_CENTER_HORIZONTAL</flag>
							<border>5</border>
							<object class="wxStaticText" name="m_staticText1">
								<font>
									<size>40</size>
									<family>default</family>
									<style>normal</style>
									<weight>normal</weight>
									<underlined>0</underlined>
								</font>
								<label>Hello!</label>
								<wrap>-1</wrap>
							</object>
						</object>
						<object class="sizeritem">
							<option>0</option>
							<flag>wxALL|wxEXPAND</flag>
							<border>5</border>
							<object class="wxButton" name="m_button1">
								<label>push Me!</label>
								<default>0</default>
							</object>
						</object>
					</object>
				</object>
			</object>
		</object>
	</object>
</resource>