Jeśli chodzi o SetLabel, to pisać tej metody nie musisz, ponieważ jest ona dziedziczona po wxControl. Jedyne co musisz zrobić, to wywalić m_label, zmienić w konstruktorze na:
wxMyButton(wxWindow *parent,
wxWindowID id,
const wxString& label = wxT(""),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize)
:wxControl(parent,
id,
pos,
size,
0,
wxDefaultValidator,
wxT("wxMyButton")),
m_pressed(false)
{
SetLabel(label); // <---
}
i w on_paint:
wxRect rc = this->GetClientSize(); // <--- przy okazji to zamiast 'GetSize'
...
wxSize s = dc.GetTextExtent(GetLabel());
...
dc.DrawText(GetLabel(), pt);
Klasę tę pisałem na szybko, więc nie pamiętałem o tego typu rzeczach. Pewnie jeszcze jakieś sprawy powyłażą, no ale to już sam powinieneś sobie poprawić.
Odnośnie pierwszego pytania. Odpowiedź klasyczna: dokumentacja + samodzielne eksperymentowanie ;)