프로그래밍/wxWidgets

[wxWidgets] Sizer을 추가하여 깔끔하게 보이게하기.

JunkMam 2024. 2. 8. 00:00

 

 wxWidgets는 Sizer라고하여, 자동으로 위치를 잡아주는 클래스가 있다.

 

 Sizer을 사용하기 위해서 wxSizer을 포함시킨다.

 

 wxOptionDialog.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#pragma once
 
#include <wx/wx.h>
#include <wx/combobox.h>
#include <wx/fontenum.h>
 
#include <wx/sizer.h>
 
#ifndef __WX_WIDGETS_OPTION_DIALOG_H__
#define __WX_WIDGETS_OPTION_DIALOG_H__
 
// ID 값 정의
enum
{
    ID_Options = wxID_HIGHEST + 1 // 사용자 정의 ID
};
 
class wxOptionDialog : public wxDialog
{
public:
    wxOptionDialog(wxWindow* parent, wxWindowID id, const wxString& title,
        const wxPoint& pos = wxDefaultPosition,
        const wxSize& size = wxDefaultSize,
        long style = wxDEFAULT_DIALOG_STYLE);
};
 
#endif
cs

 

 

wxOptionDialog.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
#include "wxOptionsDialog.h"
 
wxOptionDialog::wxOptionDialog(wxWindow* parent, wxWindowID id, const wxString& title,
    const wxPoint& pos,
    const wxSize& size,
    long style)
    : wxDialog(parent, id, title, pos, size, style) {
 
    // 컨트롤을 담을 메인 사이저 생성
    wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
 
    // 설정 대화 상자의 내용을 여기에 구성
    // 예: 설정 옵션을 위한 컨트롤 추가
    wxStaticText* staticText = new wxStaticText(this, wxID_ANY, "Font Family", wxPoint(2020), wxDefaultSize);
    mainSizer->Add(staticText, 0, wxALL, 10);
 
    // 콤보박스 생성 및 옵션 추가
    wxComboBox* comboBox = new wxComboBox(this, wxID_ANY, "", wxPoint(2050), wxSize(150-1));
 
    // 사용 가능한 폰트 패밀리 목록을 가져옵니다.
    wxArrayString fontFamilies = wxFontEnumerator::GetFacenames(wxFONTENCODING_SYSTEM, false);
 
    // 콤보박스에 폰트 패밀리를 추가합니다. foreach문 사용.
    for (const wxString& fontFamily : fontFamilies) {
        comboBox->Append(fontFamily);
    }
 
    mainSizer->Add(comboBox, 0, wxALL | wxEXPAND, 10);
 
    // OK 및 Cancel 버튼 추가
    wxSizer* buttonSizer = CreateStdDialogButtonSizer(wxOK | wxCANCEL);
    mainSizer->Add(buttonSizer, 0, wxALL | wxCENTER, 10);
 
    // 메인 사이저를 대화 상자에 설정
    SetSizer(mainSizer);
    mainSizer->SetSizeHints(this); // 이 호출은 대화 상자가 최소 크기로 축소되지 않도록 합니다.
}
cs

 

 이렇게 해서 메인 역할을 하는 BoxSizer로 수직으로 정렬해놓고,

 버튼에 관련된 Sizer로 버튼을 추가하고 나열하도록 해서 출력되는걸 확인 할 수 있다.