Skip to content

WxSizerFlags

Container for sizer items flags providing readable names for them.

Alignment

Add()를 사용하여 wxWindow를 추가할 경우 정렬 방법을 설정하고 싶을 경우 flag 인자에 wxAlignment관련 상수를 OR 연산으로 입력하면 된다.

해당 플래그 값은 아래와 같다.

  • wxALIGN_LEFT
  • wxALIGN_RIGHT
  • wxALIGN_TOP
  • wxALIGN_BOTTOM
  • wxALIGN_CENTER_VERTICAL
  • wxALIGN_CENTER_HORIZONTAL
  • wxALIGN_CENTER

중요한 점은 위의 플래그 값은 오직 정렬에 한정되어 적용된다는 점이다. wxEXPAND와 같은 Stretch관련 상수와 관련 없음을 주의해야 한다.

ALIGN CENTER

중앙정렬시 주의할 점이 있다. 우선 아래와 같은 코드를 보자:

wxBoxSizer * sizer  = new (std::nothrow) wxBoxSizer(wxVERTICAL);
wxButton * btn = new (std::nothrow) wxButton(this, wxID_ANY, wxT("BUTTON"));
sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL);

위의 코드와 같이 사용할 경우 정상적으로 세로 정렬이 적용되지 않는다. 그 이유는 wxBoxSizer의 Orientation이 동일하게 VERTICAL이기 때문이다.

wxBoxSizer에서 wxALIGN_CENTER관련 정렬을 적용할 경우 Orientation과 상반되는 정렬을 사용해야 한다.

즉, 위의 코드에서는 wxBoxSizer의 Orientation이 wxHORIZONTAL되도록 유도해야 한다.

또한 wxEXPAND속성이 존재하면 안된다.

Border

Add()를 사용하여 wxWindow를 추가할 경우 BORDER를 적용할 위치를 선정하고 싶을 경우 flag 인자에 wxDirection관련 상수를 OR 연산으로 입력하면 된다.

해당 플래그 값은 아래와 같다.

  • wxLEFT
  • wxRIGHT
  • wxBOTTOM
  • wxTOP
  • wxALL

중요한 점은 위의 플래그 값은 오직 BORDER에 한정되어 적용된다는 점이다. wxEXPAND와 같은 Stretch관련 상수와 관련 없음을 주의해야 한다.

참고로 Border 스타일과 관련된 내용은 wxBorder를 참고하면 된다.

Stretch

wxStretch관련 상수를 사용하면 된다.

해당 플래그 값은 아래와 같다.

  • wxEXPAND: 할당된 공간을 확장하여 채운다.
  • wxSHAPED: 종횡비를 유지하여 확장한다.

Empty space

Window 사이에 빈 공간을 추가하고 싶다면 아래와 같이 사용하면 된다.

wxBoxSizer * sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(_ok);
sizer->Add(5, 0); // Empty 5px (width) size.
sizer->Add(_cancel);
panel->SetSizer(sizer);

Detailed Description

Normally, when you add an item to a sizer via wxSizer::Add, you have to specify a lot of flags and parameters which can be unwieldy. This is where wxSizerFlags comes in: it allows you to specify all parameters using the named methods instead. For example, instead of

sizer->Add(ctrl, 0, wxEXPAND | wxALL, 10);

you can now write

sizer->Add(ctrl, wxSizerFlags().Expand().Border(wxALL, 10));

Favorite site