Chapter 19. Filling a window

Adding a button

lets add a button to our sample program. In the constructor for the frame, we add:

new wxButton(this, wxID_YES);

This will create a new button. The parent window for the button will be the frame (this). The id will be wxID_OK which is the default ID for any OK button. the wxButton constructor has many more optional arguments:

wxButton(wxWindow* parent, wxWindowID id, 
const wxString& label = wxEmptyString, 
const wxPoint& pos = wxDefaultPosition, 
const wxSize& size = wxDefaultSize, 
long style = 0, 
const wxValidator& validator = wxDefaultValidator, 
const wxString& name = "button")

The individual parameters are:

parent

the parent window for the button. In this case, it is the current frame. In many cases, this can be a panel, a notebook, etc.

id

the ID for the item. Connect this via your event table to call your functions. If you use default ids you will get default behavior.

pos

the position of the item, given from the top-left corner of the parent. Use wxPoint(int x, int y) to create a point object.

size

the size of the item. Use wxSize(int width, int height) to create a size object.

style

extra style attributes. can be any combination of: wxBU_LEFT, wxBU_TOP, wxBU_RIGHT, wxBU_BOTTOM, wxBU_EXACTFIT, wxNO_BORDER joined with a logical or ( | ). Example: wxBU_LEFT | wxNO_BORDER

validator

a validator can be used to check input data and have input data automatically retrieved and stored in a variable. This is useless for buttons, but useful for text fields.

name

a name for the control. Absolutely useless on modern systems. Leave the default value in there.

Please note: Even though we did not set the label, and it defaults to an empty string, the button will still display "Yes". This is because we use the default id for a "yes" button. On an international machine this will automatically translate into the language that is set, e.g. "Ja" on a German machine, "Si" on a Spanish one, etc.

Practice: Add a new button labeled "Bla" with the event id "ID_BLA". It should be at position 50,30 in the window, and have no border.

To connect a button, use the EVT_BUTTON in your event table:

EVT_BUTTON(wxID_YES, MyFrame::buttonPressed)